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 等都可以通过这个方式连接到服务器)