如果你碰巧使用GNOME,seahorse应用程序(“密码和加密密钥”)可以帮你完成。File -> New -> Secure Shell Key.
如果你喜欢终端机,运行ssh-keygen -t <type>
来生成密钥对,有效的密钥对类型有:File ->New ->Secure Shell Key。有效的密钥对类型有
程序会要求你提供一个passphrase和一个保存新密钥的位置。建议使用建议的默认路径,因为所有其他工具都会在那里寻找它。
同样,seahorse可以为你做这些 - 在我的个人密钥中,右键点击你的SSH密钥,然后选择配置安全外壳的密钥。
或者,在终端中输入ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
。
或者,完全手动逐步进行:
1.在远程主机上远程用户的主目录中创建一个名为.ssh
的目录(如果它还不存在)。
2. 在该目录中,创建一个名为authorized_keys
的文件(如果还不存在的话)。
3. 如果你的远程umask
比平时更自由,就把这个文件做成不可组写。chmod go-w ~/.ssh ~/.ssh/authorized_keys
.
4. 最后,以某种方式复制(追加)你的本地公钥 (~/.ssh/id_rsa.pub
)的内容到远程~/.ssh/authorized_keys
文件中。
如果你将你的私钥加载到ssh _代理中,它将在内存中保存解密后的密钥。我们希望这样做是为了避免每次进入服务器时重新输入密码。
首先,代理必须被启动,或者将启动的通信套接字的路径加载到一个变量中。在终端上运行ssh-agent会产生用于分配和设置代理变量的命令。这些命令可以保存在一个文件中,以便在不同的终端上使用。另外,也可以运行这些命令,忘记在另一个终端上重新使用同一个代理,例如:eval $(ssh-agent)
.
加载密钥很简单,只需执行ssh-add
并给它传递短语即可。
如果你使用的是 GNOME,gnome-keyring-daemon通常会提供与 ssh-agent 相同的 SSH 代理功能,所以你不需要启动任何东西。GNOME 也会在登录时自动加载和解锁密钥。
如果一切都做得很正确,使用ssh user@server
就不会提示你输入密码。如果代理出了问题,而不是密钥出了问题,你会被要求输入密钥的密码短语,而不是用户账户的密码。
凡是使用ssh进行通信的程序,在代理中加载了正确的密钥后,就可以不用输入用户账号密码了。诸如scp、sftp和rsync等程序就是利用了这一点。
id_dsa
而不是id_rsa
,ECDSA会有id_ecdsa
。 authorized_keys2
- 但你真的不太可能找到任何比5.0更老的服务器在使用。lsh
、ssh.com
以及其他(Unix和非)SSH服务器不包含在本教程中。将公钥复制到远程主机:
保存代理变量以便重复使用 (详细的例子)
ssh-agent \> ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent
。
你没有说明你在什么Unix上,你连接的是什么Unix,你使用的是什么shell,你使用的是什么SSH变体,等等。所以有些地方可能需要稍作调整;这是基于OpenSSH的最新版本,它在很多Unix变种上使用。
这都是来自你的本地桌面系统。
ssh-keygen
确保使用默认的键名。我建议你在该密钥上_设置一个口令,否则就是一个安全问题。"-t rsa “不是一个坏主意,但可能不需要。
ssh-copy-id username@server
这将会要求你输入登录时使用的密码,并为你设置授权/keys的东西。(不需要手动操作)
然后,这个。
`ssh-agent`
或者是这样:
exec ssh-agent sh
或者是:
exec ssh-agent bash
这样就可以启动一个SSH代理来持有你的密钥了。在许多现代的Unix变体上,如果你是以图形方式登录的,这已经发生了。第一种变体 (带背标的) 会把ssh-agent放到后台,并设置环境变量与之对话。第二种是让代理为你运行一个shell,这样当你退出shell时,代理就会退出。
许多现代的Unix变种已经有代理为你运行了,特别是当你以图形方式登录的时候。你可以试试 ”ps aux | grep ssh-agent
“或 ”ps -ef | grep ssh-agent
“;如果已经有东西在运行,就用它。
然后,最后。
ssh-add
它会要求输入密码,把你给ssh -keygen的密码给它。还有一些方法可以让它以图形方式询问。你可以把ssh-agent和ssh-add的东西放到你的登录脚本中(根据你使用的shell不同,设置也不一样),以实现自动化,但是一些Unix变种(比如当前的Ubuntu Linux)会自动完成大部分的设置,所以你真正需要做的就是创建一个密钥,然后使用ssh-copy-id在远程主机上设置它。
现在,”ssh username@server
“应该不需要任何验证就可以使用。在幕后,它使用的是ssh-agent持有的密钥,并要求代理为它做神奇的签名技巧。
从 ServerFault 的一个非常类似的问题来看,我建议使用 ssh-copy-id ,它可以为你完成设置认证密钥的所有步骤。
ssh-copy-id是一个使用ssh登录远程机器的脚本 (大概是使用登录密码,所以应该启用密码验证,除非你巧妙地使用了多个身份)
它还改变了远程用户的主页 ~/. ssh, 和 ~/.ssh/authorized/keys 的权限来移除组的可写性 (如果远程 sshd 在配置中设置了 StrictModes,那么这将阻止你登录)。
如果给出了 -i 选项,那么就会使用身份文件 (默认为 ~/.ssh/identity.pub),而不管你的 ssh-agent 中是否有密钥。
你所需要做的就是简单的。
ssh-copy-id user@host
输入一次密码,就可以了!
除了已经告诉你如何设置ssh密钥之外,我推荐 Keychain 作为一个ssh-agent控制台的前端,它允许你在每个系统进程中处理一个密钥,而不是每次登录。
我知道已经有GNOME和KDE工具可以做同样的事情了,但是如果你是console junkie类型的人,这是很好的(并且可以在大多数Unix系统上使用)。
要使用它,只需在你的~/.bashrc
后面加上以下内容 (其他shell也是如此):
if type keychain >/dev/null 2>/dev/null; then
keychain --nogui -q <all your SSH/PGP keys>
[-f ~/.keychain/${HOSTNAME}-sh] && . ~/.keychain/${HOSTNAME}-sh
[-f ~/.keychain/${HOSTNAME}-sh-gpg] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
```。
我写了这个非常非常短的教程,因为我对非常非常长的教程感到非常沮丧,因为它真的很简单:)
test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"
scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password
ssh destID@destMachine #type password
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
rm /tmp/id_rsa.pub
http://linuxproblem.org/art/_9.html
你的目标
你想使用Linux和OpenSSH来自动化你的任务。因此你需要从主机A/用户a自动登录到主机B/用户b。你不想输入任何密码,因为你想在shell脚本中调用ssh。
Putty有一个 -pw
选项,可以让你在桌面上创建一个快捷方式,比如这样。
"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password
ssh-keygen
。(如果它告诉你必须指定一个类型,则执行ssh-keygen -t rsa
。)当它要求你输入文件位置时,采用默认值。当它要求你输入密码时,按回车键表示没有密码。cat ~/.ssh/id_rsa.pub
(或者不管ssh-keygen
中的默认文件位置是什么,尽管你必须有一个非常老的ssh
安装,它才会不同); 复制输出到你的剪贴板。~/.ssh/authorized_keys
(如果~/.ssh
不存在,slogin
到某个地方;这是简单易行的方法,可以用正确的权限创建它)。将你的剪贴板(包含其他主机的id_rsa.pub
)粘贴到这个文件中。如果你想在 Linux 的终端上完成这一切:
在主机上
cd ~/.ssh/
ssh-keygen -t {rsa|dsa} -b {1024|2048|4096}。-C “如果你想要一些注释文本” -f id_ArbitraryName
{}中的项目是选项,使用rsa或dsa,并选择位数大小(越大越安全)
然后你需要给authorizedkeys和authorizedkeys2文件添加权限。
cat idArbitraryName.pub \>> 授权keys
cat idAribtraryName.pub \>> 授权keys2
然后将 id_AribtraryName 文件下载到你想ssh的盒子里。如果连接的盒子是基于unix的,可能需要一个配置文件(在putty中,上面有人介绍过)。
在连接盒上
在配置文件中 - vim ~/.ssh/config
Host example.host.com # 或你的计算机名
User username
IdentityFile ~/.ssh/id_ArbitraryName
配置文件需要600的权限。SSh文件夹需要700的权限。
希望对你遇到经常省略的配置问题有帮助。