免密码登录

同时需要在多台 Linux 服务器上操作时,大量的 IP 和用户名密码经常记不住。
将本地的公钥文件拷贝到目标服务器的 ~/.ssh/authorized_keys 文件,文件不存在则新建一个。
或者使用 ssh-copy-id -i .ssh/id_rsa.pub root@x.x.x.x

别名快捷登录

在 /etc/ssh_config 或者 ~/.ssh/config 文件里给远程主机配置别名。

Host dev1
    HostName 10.xxx.xx.xxx
    User root
    IdentityFile ~/.ssh/id_dev1

然后在终端里执行 ssh dev1,就相当于 ssh -i xxx root@xxxx

自动补全

往~/.bash_profile文件末尾追加如下行

complete -W "$(echo `cat ~/.ssh/config | grep 'Host '| cut -f 2 -d ' '|uniq`;)" ssh

zsh 不需要。

禁用密码登录

修改 /etc/ssh/sshd_config

#禁用密码验证 
PasswordAuthentication no 
#启用密钥验证 
PubkeyAuthentication yes

然后重启 systemctl restart sshd。注意如果禁用了密码验证后没有其他验证方式了,那这个禁用将会失效(建议打开密钥验证)。

SSH 连接卡死

修改客户端

在客户端上修改文件/etc/ssh/ssh_config,添加如下内容:

# 添加
ServerAliveInterval 20
ServerAliveCountMax 999

每隔20s向服务器发送一次心跳;若超过999次请求都没有发送成功,则主动断开与服务器端的连接

修改服务端

在服务器上修改文件/etc/ssh/sshd_config,添加如下内容:

# 添加
ClientAliveInterval 30
ClientAliveCountMax 10

每隔30s向客户端发送一次心跳;若超过10次请求都没有发送成功,则主动断开与客户端的连接
可以同时改或者只改一个。

重启

可同时修复上述两项配置文件,完成后重启ssh服务。Mac 客户端重新连接即可。

# 重启客户端
$ sudo systemctl restart ssh
# 重启服务端
$ sudo systemctl restart sshd

ProxyJump

https://nyogjtrc.github.io/posts/2020/03/ssh-proxyjump/

参考

http://codelife.me/blog/2012/09/01/ssh-session-profile-management-in-terminal-of-macos-x/
https://daemon369.github.io/ssh/2015/03/21/using-ssh-config-file
[SSH]客户端连接一段时间后卡死问题解