如何设置SSH,以便在连接主机时不必键入密码?
~/.ssh/config
现在需要的内容 进行更改PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
如何设置SSH,以便在连接主机时不必键入密码?
~/.ssh/config
现在需要的内容 进行更改PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Answers:
如果您碰巧使用了GNOME,则海马应用程序(“密码和加密密钥”)可以为您完成此操作:File- > New- > Secure Shell Key。
如果您希望使用终端,请运行以生成密钥对。有效的密钥对类型为:ssh-keygen -t <type>
该程序将要求您输入密码和保存新密钥的位置。建议使用建议的默认路径,因为所有其他工具都将在此处查找。
同样,seahorse经常可以为您执行此操作-在“ 我的个人密钥”中,右键单击SSH密钥,然后选择“ 配置安全外壳的密钥”。
或者,ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
在终端中。
或者,完全手动地逐步进行:
.ssh
在远程主机上的远程用户的主目录中创建一个目录(如果尚不存在)。authorized_keys
(如果尚不存在)。umask
比平时更宽松,请使该文件不可组写入:chmod go-w ~/.ssh ~/.ssh/authorized_keys
。~/.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和非Unix)SSH服务器未包含在本教程中。将公钥复制到远程主机:
ssh-copy-id -i〜/ .ssh / id_rsa.pub myaccount @ remotehost#此 猫〜/ .ssh / id_rsa.pub | ssh myaccount @ remotehost \ 'mkdir -p〜/ .ssh; cat >>〜/ .ssh / authorized_keys'#或这个
ssh代理>〜/ .ssh / cross-terminal-agent 。〜/ .ssh /跨终端代理
ssh-copy-id
可以将公钥复制到目标主机并自动设置权限。
ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address
只需更换username@server-ip-or-address
)。
您没有指定正在使用的Unix,正在连接的Unix,正在使用的shell,正在使用的SSH变体等。因此,其中一些可能需要稍作调整;例如,这基于合理的最新版本的OpenSSH,该版本已在许多Unix变体中使用。
全部来自本地桌面系统。
ssh-keygen
确保将默认名称用作键名。我建议你做设置该键的密码,否则这是一个安全问题。“ -t rsa”并不是一个坏主意,但是可能不需要。
ssh-copy-id username@server
这将要求您提供用于登录的密码,并为您设置authorized_keys内容。(无需手动操作)
然后,这:
`ssh-agent`
也许这:
exec ssh-agent sh
要么:
exec ssh-agent bash
这将启动可以保存您的密钥的SSH代理。在许多现代的Unix变体中,如果您以图形方式登录,则已经发生了。第一个变体(带有反引号)将ssh-agent置于后台,并设置环境变量与之对话。后两个使代理为您运行外壳程序,因此当您退出外壳程序时,代理程序将退出。
许多现代的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持有的密钥,并要求该代理为其执行魔术签名技巧。
也可以在Windows的PuTTY中执行此操作。
设置完公钥/私钥对后(如此处其他答案所示),运行PuttyGen。在其中,加载您已经设置的现有私钥,然后将其另存为PuTTY私钥(ppk)。
然后在PuTTY中,只需单击要自动登录的已保存会话,然后单击“加载”。从这里进入左窗格中的Connection-> Data,然后在“自动登录用户名”中键入该远程服务器的用户名:
之后,进入连接-> SSH->身份验证,并浏览您在PuttyGen中创建的ppk:
然后返回会话页面并保存您先前加载的会话。
从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工具可以执行相同的操作,但是如果您是控制台迷类型,那么这很好(可以在大多数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
http://linuxproblem.org/art_9.html
你的目标
您想使用Linux和OpenSSH来自动执行任务。因此,您需要从主机A /用户a自动登录到主机B /用户b。您不想输入任何密码,因为您想在shell脚本中从调用ssh。
我对非常长的教程感到非常沮丧之后写了这篇非常简短的教程,因为它是如此简单:)
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
ssh-keygen
。(如果它告诉您必须指定一种类型,请执行ssh-keygen -t rsa
。)当它询问您文件的位置时,请使用默认值。当它要求您输入密码时,请按Enter键而不输入密码。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并选择位数(越大越安全)
然后,您需要将权限添加到authorized_keys和authorized_keys2文件。
猫id_ArbitraryName.pub >> authorized_keys
猫id_AribtraryName.pub >> authorized_keys2
然后,将id_AribtraryName文件下载到要从中进行ssh的框中。如果接线盒是基于Unix的,则可能需要一个配置文件(在腻子中,上面提到的那个人)。
在接线盒上
在您的配置文件中-vim〜/ .ssh / config
主机example.host.com#或您的计算机名称
用户名
IdentityFile〜/ .ssh / id_ArbitraryName
配置文件需要600的权限。SSh文件夹需要700。
如果您遇到了很多被忽略的配置问题,希望对您有所帮助。