Mac ssh
在Terminal里使用SSH便捷登录需要解决三个问题
- 免密码
- 别名快捷登录
- 自动补全
免密码
SSH有两种验证方式:密码和非对称密钥。虽然相比密码来说,非对称密钥的安全性会低一些(某用户拥有你本地root权限,可能就可以操作你的远程服务器,当然密钥本身也设置有密码),但是这种与系统绑定的信任机制给无人值守的远程拷贝和系统备份提高了便利。
配置步骤如下:
-
创建密钥对
注意,如果有git生成的Key直接使用即可,不用重新生成
开启终端并执行ssh-keygen -t rsa
依照提示完成即可,然后将
id_rsa
和id_rsa.pub
文件拷贝到~/.ssh/
目录。 -
拷贝公钥到远程服务器
需要将公钥id_rsa.pub
的内容拷贝到远程服务器~/.ssh/authorized_keys
文件里。该文件里可能不存在,需要新建。若该文件已经存在,里面可能有其他用户添加的公钥,所以需要将公钥id_rsa.pub
的内容追加在文件尾部(独立成行),而不是覆盖该文件.
- 注意:这里不要使用vim进行id_rsa.pub文件的复制粘贴,要使用文件上传。否则可能会因为特殊字符的原因导致key错误无法连接
- 若
authorized_keys
已存在cat ~/.ssh/id_rsa.pub | ssh username@example.com "cat - >> ~/.ssh/authorized_keys"
- 若
authorized_keys
不存在scp ~/.ssh/id_rsa.pub username@example.com:~/.ssh/authorized_keys
- 更好的方式(无论
authorized_keys
在与不在)ssh-copy-id username@example.com
- [可选] 提高系统安全性
chmod 0600 ~/.ssh/authorized_keys
- [注意]如果系统开启的SELinux,完成上述配置以后仍然会提速输入密码,需要执行如下命令
restorecon -R -v /root/.ssh
补充:当无法登录时,记得查看日志查找问题
服务端日志 tail -f /var/log/secure
客户端日志 ssh -v root@xxx.xxx.xxx.xx
别名快捷登录
SSH可以在/etc/ssh/ssh_config
或者~/.ssh/config
文件里给远程连接主机配置别名。相当与Putty里的会话管理。
在~/.ssh/config
里添加如下配置
然后在终端里执行ssh dv
,就相当于sshdomainuser@example.com
至此,已经可以在命令行里实现类似Putty里免密码快捷登录了。但是随着~/.ssh/config
里服务器别名项的增多,或者某些服务器长期不用,别名记不起来了。当然使用cat
和grep
命令可以轻松搞定。如果ssh
命令能如ls
命令有自动补全就好了。这个真可以有。
自动补全
往~/.bash_profile
文件末尾追加如下行
complete -W "$(echo `cat ~/.ssh/config | grep 'Host '| cut -f 2 -d ' '|uniq`;)" ssh
重启终端,ssh + TAB
是不是很酷。
如果没有.bash_profile文件,则
cd ~
touch .bash_profile
加入文件内容
source .bash_profile
有时候