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

Ref

维护网站需要一定的开销,如果您认可这篇文章,烦请关闭广告屏蔽器浏览一下广告,谢谢!
加载中...

(。・∀・)ノ゙嗨,欢迎来到 lookas 的小站!

这里是 lookas 记录一些事情的地方,可能不时会有 lookas 的一些神奇的脑洞或是一些不靠谱的想法。

总之多来看看啦。