这可能是一个非常愚蠢的问题,但我使用的是Ganymed ssh 2库,我想知道如何使用Connection对象连接但是使用无密码ssh。我尝试使用键盘交互模式进行身份验证,但似乎并不支持。
谢谢!
答案 0 :(得分:0)
以下是一些方便或无需无密码访问机器的情况。我总是查找一系列命令,我可以复制并粘贴以快速完成。他们在这里。
生成密钥对 - ssh的一种登录模式是使用SSH密钥对。密钥对由私钥和公钥组成。私钥保留在本地计算机上,而您的公钥是您分发给要登录的所有计算机的公钥。您可以生成几种密钥,rsa1 (for SSH1)
,dsa (SSH2)
或rsa (SSH2)
。根据我的IT人员,他喜欢 DSA 。您可以(并且应该)将密码与密钥对相关联,这样即使其他人设法访问您的帐户,也只能使用密码。如果您有多个密钥对,则对所有密钥对使用相同的密码将使它们同时处于活动状态。您还可以更改密钥使用的位数。你使用的位越多,它就越难破解,但我相信标称的性能下降。我被建议使用2048位。非常好,它是2048位DSA密钥。
ssh-keygen -t dsa -b 2048
#输入强密码
如果由于某种原因你需要一个rsa键,你可以用适当的参数, -t rsa or -t rsa1
替换该类型。
注意:
(-rw------- or chmod 600 *)
。要做的最重要的文件是
authorized_keys和私钥文件。有时登录会
如果您没有正确设置权限,则默默地失败。如果您需要在远程计算机上创建一个.ssh目录
〜/ .ssh / id_dsa.pub | ssh user@remote.machine.com' mkdir .ssh;猫>> 的.ssh / authorized_keys的'
SSH代理 - 现在您有了一对,您可以像往常一样尝试登录远程计算机。系统将提示您输入密钥对密码。如果您在创建密钥时将其留空,则只需按Enter(并在您上面加密)。如果此时按Enter键并且您有密码,则会提示您输入远程帐户密码。您可以通过使用ssh-agent避免这样做。这将允许您在给定计算机上输入一次密钥对的密码,并反复重复使用。 ssh-agent将关于密钥的信息存储在该系统的内存中,因此如果您移动到另一个系统或重新启动计算机,则必须再次运行ssh-agent。 ssh-agent还将输出一些可用于访问内存中密钥的环境变量。我有几个别名可以帮助我解决这个问题。需要考虑的一件事是为密钥在内存中的活动时间添加一个时间限制。如果您希望它们仅持续一天,您可以在ssh-agent命令中添加-t 86400(这些是秒)。
别名代理' rm -f" $ HOME" / .ssh / hostname
。代理人; ssh-agent -t 86400 | grep -v echo> " $ HOME" / .ssh / hostname
。代理人;来源" $ HOME" / .ssh / hostname
。代理商; SSH-添加'
别名sshagent' if(-e" $ HOME" / .ssh / hostname
。agent)source" $ HOME" /.ssh / {{ 1}}。 ENDIF'
alias agent =' rm -f" $ HOME" / .ssh / hostname
。agent; ssh-agent -t 86400 | grep -v echo> " $ HOME" / .ssh / hostname
。代理人;来源" $ HOME" / .ssh / hostname
。代理商; SSH-附加'
别名sshagent =' if [-e" $ HOME" / .ssh / hostname
。agent];然后来源" $ HOME" / .ssh / hostname
。音响'
现在您应该只需在计算机上运行一次代理,然后每个shell运行hostname
一次。然后,您无需输入密码即可登录远程计算机。如果您的ssh代理程序过期(您将知道,因为您将被提供密码),请再次运行代理程序。
Root访问 - 您还可以让用户以root用户身份登录计算机,而无需提供root密码。只需将用户公钥添加到root的authorized_keys列表中,然后用户就可以使用root作为用户名登录计算机。
sshagent
cat ~user/.ssh/id_dsa.pub | ssh root@remote.machine.com 'cat >> .ssh/authorized_keys'
sshagent; ssh root@remote.machine.com
建议您一旦能够以root身份使用密钥远程登录,则应通过ssh禁用基于密码的登录,方法是确保以下行位于password ssh root@remote.machine.com
中
PermitRootLogin 无密码