OpenSSH 配置小记
2019-12-21
OpenSSH 是一个优秀的工具,提供了常用的 Linux 服务器管理操作(执行命令、传递文件)的实现,并且提供了许多高级特性(流量转发)。下文记录了一些网络方面、安全方面、使用便捷上常见的优化。本文在 macOS Catalina (10.15.2), Ubuntu Server 18.04 Bionic Beaver 上测试通过。
本文为更新,原文 Ubuntu调整ssh证书登录,优化ssh配置,并且让sudo不需要密码
配置连接保活
中国大陆的家庭网络一般是过 NAT 的,这意味着一条 TCP 连接必须在一定时间段内产生通信,否则会被 NAT 网关关闭。
在客户机上的 ~/.ssh/config
中配置(推荐)
在客户机上执行 vi ~/.ssh/config
,在文首添加,
Host *
ServerAliveInterval 60
在服务器上的 sshd_config
中配置
在服务器上执行 sudo vi /etc/ssh/sshd_config
,找到 ClientAliveInterval
行,取消注释写入,或者在文末添加
ClientAliveInterval 60
这代表着每隔 60 秒,服务端会向客户端发送心跳包确保连接正常。发送心跳包的周期需要根据本地网络情况来确定,如果频繁出现 pipe broken
错误可以适当调低这个数值。
在客户机上的 ssh_config
中配置(不推荐)
在客户机上执行 sudo vi /etc/ssh/ssh_config
,找到 ServerAliveInterval
行,取消注释写入,或者在文末添加
ServerAliveInterval 60
这代表着每隔 60 秒,客户端会向服务端发送心跳包确保连接正常。
MacOS 可能在更新的时候覆盖 /etc/ssh/ssh_config
文件,故不推荐这种方式。
配置证书登录
证书登录可以提升部分安全性,搭配下文所提的捷径可以极大的提升便捷性。
在客户机上生成私钥
私钥最好不要在网络上传输,故我们在本地计算机上生成私钥。
执行 ssh-keygen -C ""
,一路回车使用默认配置,该实用程序会在 ~/.ssh
创建无密码保护的、包含着公钥的私钥文件 id_rsa
,以及没有注释的需要贴到服务器 authorized_keys
的公钥文件 id_rsa.pub
。
传输公钥到服务器
执行 ssh-copy-id user@host
,该命令会将客户机上的 ~/.ssh/id_rsa.pub
内容复制到服务器上的 ~/.ssh/authorized_keys
。命令执行中会提示输入服务器密码。
之后可以使用 ssh user@host
就可以无密码登录服务器了(会自动使用 ~/.ssh/id_rsa
私钥认证)
禁用密码登录(慎用)
在服务器上执行 sudo vi /etc/ssh/sshd_config
,找到 PasswordAuthentication
行,取消注释写入,或者在文末添加
PasswordAuthentication no
sudo 不需要密码(不建议)
在服务器上执行 sudo visudo -f /etc/sudoers.d/ubuntu
,在文末添加
# User rules for ubuntu
ubuntu ALL=(ALL) NOPASSWD:ALL
修改 ssh 端口
TODO
重启 sshd 服务
在服务器上执行 sudo service ssh restart
配置捷径(~/.ssh/config
)
在客户机上执行 ~/.ssh/config
,在文末按照下方格式追加
Host examplehost
HostName 1.2.3.4
User ubuntu
Port 22
使用 ssh examplehost
即可连接到服务器(sftp
, scp
等都可以通过这个方式连接到服务器)