译自:http://www.vineetmanohar.com/2009/07/17/howto-ssh-without-password/
这个简单的教程讲解了如何无需输入密码 SSH 连接到远程机器。在你需频繁的登陆到同一机器,而又不得不一次次输入密码时就可以使用这一技术。这也很适于这样的场景:当你有一个脚本需要通过 SSH 从远程机器取文件或者在远程机器上执行一个任务,并且希望能自动的运行该脚本,而用不着人工去输入一个密码。
这些指令在 Linux 和 Mac 下能正常工作。你可以在 Windows 下参照同样的方法来使用 Putty,但是我这里没有针对具体 Putty 指令作描述。
目标:从本机登陆到远程服务器无需输入密码
步骤 1/2:在本机上:生成认证码
认证码是一个私钥公钥对。你的公钥也是一个 2-3 行的长长看不懂东西。公钥就像是你登录后的唯一标识。私钥就像是你的密码,但比一个规则的密码要长。你可以通过如下命令来产生你的公钥和私钥:
1 |
ssh-keygen -t rsa |
1 |
Generating public/private rsa key pair.Enter file in which to save the key (/home/vineetmanohar/.ssh/id_rsa: |
接受默认的选择。按回车键。
1 2 |
Enter passphrase (empty for no passphrase): Enter same passphrase again: |
回车两次。密钥(passphrase) 是用来对你的私钥进行加密的,加密后就没有人能看得懂它了。然而,假如你想要无密码登陆的话,就不能对你的私钥进行加密。
1 2 |
The key fingerprint is: 5e:26:52:34:a1:22:18:68:11:11:7d:8d:c6:d5:4b:bf vineetmanohar@vineetmanohr.com |
刚刚做了什么?
在你的本机上的 ~/.ssh 目录中,你创建了两个文件。
1 2 |
cd ~/.ssh ls -l |
1 2 |
-rw------- 1 vineetmanohar vineetmanohar 1675 2009-07-17 17:27 id_rsa -rw-r--r-- 1 vineetmanohar vineetmanohar 411 2009-07-17 17:27 id_rsa.pub |
id_rsa 包含了你的私钥。id_rsa.pub 中含有了你的公钥。
步骤 2/2:在远程机器上:认证无需密码的登陆
登陆到远程机器
1 |
ssh hostname -l username |
1 2 3 |
The authenticity of host 'vineetmanohar.com (XXX.XXX.XXX.XX)' can't be established. RSA key fingerprint is 44.2b:93:ce:1b:1b:99:3a:6d:91:d1:50:aa:0d:87:40. Are you sure you want to continue connecting (yes/no)? |
[Unmi 注] 如果你执行 ssh hostname -l username 时,未得到上面的提示,那应该是在你的 ~/.ssh/ 目录中有一个 known_hosts 文件中包含有该远程机器的信息,那么你可把该文件删除(如果有能耐确定是其中哪一块对应于这个远程机器的话也可以只删除对应的部分),然后再执行 ssh hostname -l username 命令即可。另外命令 ssh username@hostname 是等效的。
输入 yes 并回车
1 2 |
Warning: Permanently added 'vineetmanohar.com,XXX.XXX.XXX.XX' (RSA) to the list of known hosts. username@vineetmanohar.com's password: |
输入密码,并回车
在远程机器上创建一个 .ssh 目录,并在其中生成一个 .authorized_keys 文件。你需要拷贝你本机上的 'id_rsa.pub' 中的全部内容贴到远端服务器的 .authorized_keys 文件中。
1 2 3 4 5 6 7 8 9 |
mkdir .ssh chmod 700 .ssh cd .ssh touch authorized_keys chmod 600 authorized_keys # copy-paste the entire contents of your local machine's ~/.ssh/id_rsa.pub file in authorized_keys vi authorized_keys # logout exit |
现在你就能登陆到远程服务器时不用输入你的密码了。
1 2 |
# type this command from your local machine ssh hostname -l username |
SSH 可以无密码登陆了!现在,你也能进行 scp 操作而不用输入你的密码了。
博主注:其实在用 ssh-keygen
生成密钥之后,在本机直接用命令 ssh-copy-id user@hostname
就能把本地的公钥拷到远端机器上了, 用不着那些手工操作。见 ssh-copy-id(1) - Linux man page
本文链接 https://yanbin.blog/ssh-no-need-input-password/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
学习了!!
"输入密码,并回车
在远程机器上就创建了一个 .sh 目录"
应该是.ssh目录吧