一、ssh 基础使用
1. ssh 客户端使用 Secure Shell(ssh)协议连接到运行了 ssh 服务端的远程服务器上。
2. ssh 是专为远程登录会话和其他网络服务提供安全性的协议。
-
- 有效防止远程管理过程中的信息泄露;
- 传输数据加密,可以防止 DNS 和 IP 欺骗;
- 传输数据压缩,加快传输速度。
3. OpenSSH 是 SSH 协议的免费开源实现,提供了服务端程序(openssh-server)和客户端程序(openssh-client)。
-
- Mac 和 Linux 中默认安装了 ssh 客户端,可以直接在中断中使用 ssh 命令。
- Windows 需要手动安装 ssh 客户端,常用的有 PuTTY 和 XShell。
4. OpenSSH 服务端常用命令
1 # 安装服务端(Ubuntu) 2 sudo apt install openssh-server 3 4 # 安装客户端(Ubuntu) 5 sudo apt install openssh-client 6 7 # 查看 ssh 服务是否开启 8 netstat -tlp | grep ssh 9 10 # 启动/停止/重启 ssh 服务 11 sudo /etcinit.d/ssh start 12 13 # 启动/停止/重启 ssh 服务 14 sudo /etcinit.d/ssh stop 15 16 # 启动/停止/重启 ssh 服务 17 sudo /etcinit.d/ssh restart
5. ssh 服务端配置文件默认为 /etc/ssh/sshd_config,可以按需修改默认 22 端口等配置。
1 # 命令格式 2 $ ssh [-options] [user@hostname] 3 4 # options 5 # -p:指定 ssh 端口号,默认端口为 22 6 # -i:使用指定私钥文件连接服务器(免密登录)
-
- user:远程服务器登录的用户名,默认为当前用户
- hostname:远程服务器地址,可以是 IP、域名、别名
- exit 或 logout 都可以退出当前登录
1 # 以colin用户登录192.168.1.196的到ssh服务器 2 $ ssh colin@192.168.1.196 3 4 # 以colin用户登录到192.168.1.198的ssh服务器,使用2222端口 5 $ ssh -p 2222 colin@192.168.1.198
二、ssh 高级配置
1. ssh 的配置都保存在 ~/.ssh 中
-
- known_hosts:作为客户端。记录曾连接服务器授权。ssh第一次连接一台服务器会有一个授权提示,确认授权后会记录在此文件中,下次连接记录中的服务器时则不再需要进行授权确认提示。
- authorized_keys:作为服务端。客户端的免密连接公钥文件
- config:作为客户端,记录连接服务器配置的别名
2. 服务器别名
远程管理命令(如 ssh、scp 等)连接一台服务器时,一般都需要提供服务器地址、端口、用户名,每次输入会很麻烦。我们可以把常用的服务器连接参数打包,记录到配置文件中,并记录一个别名。这样我们就可以通过别名来访问服务器了。
配置方法如下:
-
- 创建或打开 ~/.ssh/config,在文件中追加服务器配置信息。
- 一台服务器的配置信息如下:
1 # 以下配置中,只有 HostName 是必选项,其余的可以省略 2 Host ColinMac 3 HostName 192.168.199.116 4 User colin 5 Port 22
配置完成后,远程管理命令中就可以直接使用别名访问了:
1 $ ssh 116-Server 2 $ scp 123.txt 116-Server:Desktop
3. 免密登录
1 # 命令格式 2 ssh-keygen [-options]
options:
-
- -t:指定加密类型,默认为非对称加密(rsa),所有可选项:dsa,ecdsa,ed25519,rsa
- -f:秘钥文件名
- -C:注释,将附加在秘钥文件尾部
远程管理命令(如 ssh、scp 等)每次都要提供用户密码保证安全。除此之外,我们可以配置使用指定加密算法验证秘钥的方式,来避免每次输入密码。
配置免密登录后,ssh 连接和 scp 等远程管理命令都不需要再输密码。
生成秘钥时,如果指定了文件名,连接服务器时需要通过 -i 指定要验证的秘钥文件,譬如: ssh -i file user@host。默认文件名则可以省略。
配置步骤:
1 # 客户端生成秘钥 2 ssh-keygen 3 4 # 上传公钥到服务器 5 ssh-copy-id user@hostname # 文件会自动上传为服务器特定文件 ~/.ssh/authorized_keys
4. 免秘钥文件登录
i. 生成秘钥对
1 ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME] 2 chmod 400 ~/.ssh/[KEY_FILENAME]
ii. 上传公钥
iii. 简化登录
我们可以将秘钥文件添加到 ssh 客户端 ~/.ssh/config 中,简化连接命令
1 Host * 2 AddKeysToAgent yes 3 UseKeychain yes # only for mac 4 5 Host tu 6 HostName IP_ADDRESS 7 Port 22 8 User USERNAME 9 IdentityFile ~/.ssh/gcp
1 # 后台运行ssh-agent 2 $ eval "$(ssh-agent -s)" 3 # 添加密钥到ssh-agent 4 $ ssh-add -K ~/.ssh/gcp