__都非拉得的博客

Posted on 04 Jun 2015

通常利用 ssh 连接远程服务器,一般都要输入以下类似命令:

ssh user@hostname -p port

如果拥有多个 ssh 账号, 每次链接的时候会非常麻烦.

还好,ssh 提供一种优雅且灵活的方式来解决这个问题,就是利用 ssh 的用户配置文件 config 管理 ssh 会话。ssh 的用户配置文件是放在当前用户根目录下的 .ssh 文件夹里(~/.ssh/config,不存在则新创建一个),其配置写法如下:

Host    别名
    HostName        主机名
    Port            端口
    User            用户名
    IdentityFile    密钥文件的路径

有了这些配置,就可以这样用 ssh 登陆服务器了:

ssh 别名

例1:

链接虚拟机vm01

Host    vm01                                                                                                               
    HostName        192.168.1.4
    Port            22
    User            root


# ssh vm01

例2:

链接github ssh

Host    github
    HostName        github.com
    PreferredAuthentications publickey
    IdentityFile    ~/.ssh/github.pub

# ssh -T git@github.com

参数说明:

Host *  # 只对能够匹配后面字串的计算机有效。“*”表示 所有的计算机
ForwardAgent no # 设置连接是否经过验证代理(如果存在)转发给远程计 算机
ForwardX11 no # 设置X11连接是否被自动重定向到安全的通道和显示集 (DISPLAY set)
RhostsAuthentication no # 设 置是否使用基于rhosts的安全验证
RhostsRSAAuthentication no # 设置是否使用用RSA算法的基于rhosts的安全验证
RSAAuthentication yes # 设置是否使用RSA算法进行安全验证
PasswordAuthentication yes #  设置是否使用口令验证
FallBackToRsh no    #设置如果用ssh连接出现错误是否自动 使用rsh
UseRsh no # 设置是否在这台计算机上使用“rlogin/rsh”
BatchMode no # 如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入 口令的时候,这个选项对脚本文件和批处理任务十分有用
CheckHostIP yes # 设置ssh是 否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”
StrictHostKeyChecking no # 如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就 拒绝连接
IdentityFile ~/.ssh/identity # 设置从哪个文件读取用户的 RSA安全验证标识
Port 22 # 设置连接到远程主机的端口
Cipher blowfish # 设置加密用的密码
EscapeChar ~ # 设置escape字符

注: 如果出现 “Unable to negotiate with ... port 22: no matching host key type found. Their offer: ssh-dss”

在~/.ssh/config 目录文件下面,增加以下内容:

HostkeyAlgorithms ssh-dss