基本用法
# 基本用法
私钥设置了密码以后,每次使用都必须输入密码,有时让人感觉非常麻烦。比如,连续使用scp
命令远程拷贝文件时,每次都要求输入密码。
ssh-agent
命令就是为了解决这个问题而设计的,它让用户在整个 Bash 对话(session)之中,只在第一次使用 SSH 命令时输入密码,然后将私钥保存在内存中,后面都不需要再输入私钥的密码了。
第一步,使用下面的命令新建一次命令行对话。
$ ssh-agent bash
上面命令中,如果你使用的命令行环境不是 Bash,可以用其他的 Shell 命令代替。比如zsh
和fish
。
如果想在当前对话启用ssh-agent
,可以使用下面的命令。
$ eval `ssh-agent`
上面命令中,ssh-agent
会先自动在后台运行,并将需要设置的环境变量输出在屏幕上,类似下面这样。
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-barrett/ssh-22841-agent; export SSH_AUTH_SOCK;
SSH_AGENT_PID=22842; export SSH_AGENT_PID;
echo Agent pid 22842;
2
3
4
eval
命令的作用,就是运行上面的ssh-agent
命令的输出,设置环境变量。
第二步,在新建的 Shell 对话里面,使用ssh-add
命令添加默认的私钥(比如~/.ssh/id_rsa
,或~/.ssh/id_dsa
,或~/.ssh/id_ecdsa
,或~/.ssh/id_ed25519
)。
$ ssh-add
Enter passphrase for /home/you/.ssh/id_dsa: ********
Identity added: /home/you/.ssh/id_dsa (/home/you/.ssh/id_dsa)
2
3
上面例子中,添加私钥时,会要求输入密码。以后,在这个对话里面再使用密钥时,就不需要输入私钥的密码了,因为私钥已经加载到内存里面了。
如果添加的不是默认私钥,ssh-add
命令需要显式指定私钥文件。
$ ssh-add my-other-key-file
上面的命令中,my-other-key-file
就是用户指定的私钥文件。
第三步,使用 ssh 命令正常登录远程服务器。
$ ssh remoteHost
上面命令中,remoteHost
是远程服务器的地址,ssh 使用的是默认的私钥。这时如果私钥设有密码,ssh 将不再询问密码,而是直接取出内存里面的私钥。
如果要使用其他私钥登录服务器,需要使用 ssh 命令的-i
参数指定私钥文件。
$ ssh –i OpenSSHPrivateKey remoteHost
最后,如果要退出ssh-agent
,可以直接退出子 Shell(按下 Ctrl + d),也可以使用下面的命令。
$ ssh-agent -k