开启成长之旅!这是我参加「日新计划 2 月更文应战」的第 21 天,点击检查活动概况。
SSH 概述
SSH
(安全外壳协议 Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,用于在网络中完结客户端和服务端的衔接,典型的如咱们在本地电脑经过 SSH
衔接长途服务器,从而做开发,Windows、macOS、Linux都有自带的 SSH
客户端,但是在Windows上使用 SSH
客户端的体会并不是很好,所以咱们一般使用 Xshell
来替代。
一,准备工作
1.1, 安装 SSH 客户端
为了建立 SSH 长途衔接,需求两个组件:客户端和相应服务端组件,SSH 客户端是咱们安装在本地电脑的软件;而服务端,也需有一个称为 SSH 看护程序的组件,它不断地侦听特定的 TCP/IP 端口以获取或许的客户端衔接请求。 一旦客户端发起衔接,SSH 看护进程将以软件和它支撑的协议版别作为响应,两者将交流它们的标识数据。假如供给的凭证正确,SSH 会为适当的环境创立一个新会话。
MacOS 体系自带 SSH 客户端,能够直接使用,Windows 体系需求安装 Xshell
客户端软件,大部分 Linux 发行版体系都自带 SSH 客户端,能够直接使用,可经过 ssh -V
指令检查当前体系是否有 SSH 客户端。
[root@VM-0-2-centos ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
1.2, 安装 SSH 服务端
Linux 体系检查 ssh 服务端是否可用的指令有好几种,比如直接看是否有 ssh
进程在运转:
ps -ef | grep ssh
运转以上后,输出成果示例如下,有 sshd 进程在运转,阐明 ssh 服务端可用。
-bash-4.3$ ps -e|grep ssh
336 ? 00:00:00 sshd
358 ? 00:00:00 sshd
1202 ? 00:00:00 sshd
1978 ? 00:00:00 sshd
1980 ? 00:00:00 sshd
2710 ? 00:00:00 sshd
2744 ? 00:00:00 sshd
2829 ? 00:00:00 sshd
2831 ? 00:00:00 sshd
9864 ? 00:00:00 sshd
9893 ? 00:00:02 sshd
关于 Ubuntu 体系,可经过以下指令检查 OpenSSH
服务端软件是否可用:
ssh localhost # 不同 Linux 体系输出或许不一样
二,根据暗码的登录衔接
典型用法,只需输入以下指令即可衔接长途服务器。
# ssh衔接默许端口是22,假如本地机用户名和长途机用户名共同,能够省掉用户名
ssh username@host
# 也能够指定衔接端口
ssh -p port user@host
上述指令是典型的 SSH 衔接长途服务器的指令,假如是第一次衔接运转后会得到以下提示,正常输入 yes
,然后输入账号暗码即可衔接成功:
The authenticity of host '81.69.58.141 (81.69.58.141)' can't be established.
ED25519 key fingerprint is SHA256:QW5nscbIadeqedp7ByOSUF+Z45rxWGYJvAs3TTmTb0M.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Last login: Tue Feb 28 15:33:06 2023 from xx.xx.xx.xx
三,根据公钥登录衔接
前面的指令是经过暗码(私钥)登录,这样比较麻烦,因为每次登录咱们都需求输入暗码,因而咱们能够选择 SSH 的公钥登录衔接方法,省去输入暗码的过程。
公钥登录的原理,是先在本地机器上生成一对公钥和私钥,然后手动把公钥上传到长途服务器。这样每次登录时,长途主机会向用户发送一段随机字符串,而用户会用自己的私钥对这段随机字符串进行加密,然后把加密后的字符串发送给长途主机,长途主机会用用户的公钥对这段字符串进行解密,假如解密后的字符串和长途主机发送的随机字符串共同,那么就认为用户是合法的,答应登录。 只需求把私钥传给长途服务器,长途服务器就能够验证私钥是否是对应的公钥,假如是就答应登录,这样就不需求输入暗码了。
SSH 支撑多种用于身份验证密钥的公钥算法, 包括 RSA、DSA、ECDSA 和 ED25519 等,其中 RSA 算法是最常用的,因为它是 SSH 协议的默许算法,所以咱们这儿以 RSA
算法为例来生成密钥,并装备免暗码长途衔接。
ssh-keygen
是为 SSH 创立新的身份验证密钥对的工具。此类密钥对用于自动登录、单点登录和验证主机,常用参数定义如下:
-
-t
参数指定密钥类型 -
-b
参数指定密钥长度
根据公钥登录衔接的具体过程如下:
1,本地终端运转 ssh-keygen -t rsa -b 4096
指令生成密钥对,运转后会提示输入密钥保存途径,直接回车即可,保存在默许途径下,然后会提示输入密钥暗码,这儿咱们不设置暗码,直接回车即可,然后会提示再次输入暗码,这儿也不设置暗码,直接回车即可,最后会提示密钥生成成功,如下图所示,能够看出 ~/.ssh/
目录下,会新生成两个文件:id_rsa.pub
和 id_rsa
,分别是公钥和私钥文件。
2,将本地 .ssh
目录下的 id_rsa.pub
文件内容添加到方针服务器的 ~/.ssh/authorized_keys
文件中,假如方针服务器没有 .ssh
目录,需求先创立 .ssh
目录,然后再创立 authorized_keys
文件,然后再添加文件内容。
具体操作指令如下:
# 1,本地终端运转指令
cat ~/.ssh/id_rsa.pub # 检查本地公钥文件内容,并复制
# 2,长途终端运转指令,有 authorized_keys 文件则越过
mkdir -p ~/.ssh # 创立 .ssh 目录
touch ~/.ssh/authorized_keys # 创立 authorized_keys 文件
# 3,然后将本地公钥文件内容粘贴到 `authorized_keys` 文件中,保存退出
假如觉得上述过程过分繁琐,可经过下面指令,一键完结公钥登录衔接的装备:
$ ssh username@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
只要将公钥文件内容写入长途服务器的 authorized_keys
的文件,公钥登录的设置就完结了,后续长途衔接就不必每次输入暗码了!
Github
提交代码的时分,也是经过公钥登录衔接的方法,只要将本地的公钥文件内容添加到 github 的 authorized_keys
文件中,就能够免暗码提交代码了,原理是如出一辙的。
四,VSCode 长途衔接
VSCode 也支撑长途衔接,能够经过 Remote-SSH
插件来完结,具体操作过程如下:
1,在 VSCode 中安装 Remote-SSH 插件。
2,windows 体系 ctrel + shift + p
指令翻开指令面板,输入 Remote-SSH: Connect to Host...
,然后选择 SSH Configuration
,或者经过左边菜单栏的 Remote Explorer
-> SSH Targets
-> SSH Configuration
进入。如下图所示:
3,然后会翻开 ~/.ssh/config
装备文件,能够参阅如下所示模板进行装备:
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host JumpMachine
HostName jump-vscode.sensetime.com
# 你跳板机的用户名
User username
Host T4
# 方针机的ip地址
HostName xxx.xxx.xxx.xxx
# 你方针机的用户名
User username
# 方针机登录端口
Port 22
# macos体系: ProxyCommand ssh -q -W %h:%p JumpMachine
ProxyCommand ssh -q -W %h:%p JumpMachine
4,本地机生产公钥并追加到长途服务器 authorized_keys
中的过程,参阅第三章。
5,装备完结后,保存退出,然后在 VSCode 中,点击左边菜单栏的 Remote Explorer
-> SSH Targets
-> T4
,即可衔接到长途服务器。
参阅资料
- 维基百科-Secure Shell
- How to Use ssh-keygen to Generate a New SSH Key?
- SSH原理与运用(一):长途登录