29.4 关于SSH主机别名
在实际应用中,有时需要使用多套公钥/私钥对,例如:
使用默认的公钥访问服务器的git账号,可以执行git命令,但不能进行shell登录。
使用特别创建的公钥访问服务器的git账号,能够获取shell,登录后可以对Git服务器软件进行升级、维护等工作。
访问Github(免费的Git服务托管商)使用其他公钥(非默认公钥)。
从上面的说明中可以看出,用户可能拥有不只一套公钥/私钥对。为了创建不同的公钥/私钥对,在使用ssh-keygen命令时就需要通过-f参数指定不同的私钥名称。用法如下:
$ssh-keygen-f~/.ssh/<filename>
请将<filename>替换为有意义的名称。命令执行完毕后,会在~/.ssh目录下创建指定的公钥/私钥对:文件<filename>是私钥,文件<filename>.pub是公钥。
将新生成的公钥添加到远程主机登录用户主目录下的.ssh/authorized_keys文件中,就可以使用新创建的公钥建立到远程主机<server>的<user>账户的无口令登录(采用公钥认证)。操作如下:
$ssh-copy-id-i.ssh/<filename>.pub<user>@<server>
现在用户存在多个公钥/私钥对,那么当执行下面的ssh登录指令时,用到的是哪个公钥呢?
$ssh<user>@<server>
当然是默认公钥~/.ssh/id_rsa.pub。那么如何用新建的公钥连接server呢?
SSH的客户端配置文件~/.ssh/config可以通过创建主机别名,在连接主机时选择使用特定的公钥。例如~/.ssh/config文件中的下列配置:
host bj
user git
hostname bj.ossxp.com
port 22
identityfile~/.ssh/jiangxin
执行下面的SSH登录命令:
$ssh bj
或者执行下面的Git命令:
$git clone bj:path/to/repos/myrepo.git
虽然这两条命令各不相同,但是都使用了SSH协议,以及相同的主机别名:bj。参考上面在~/.ssh/config文件中建立的主机别名,可以做出如下判断:
登录的SSH主机名为bj.ossxp.com。
登录时使用的用户名为git。
认证时使用的公钥文件为~/.ssh/jiangxin.pub。