我一直在试图按照这个教程: 本教程 ,但已经卡在通过公共密钥login(没有passsword提示)。 我对UNIX命令行相当陌生。
我的情况是,我正在运行一个PHP脚本(ssh2),并通过ssh成功连接后运行下面的命令。
ssh -f -L 3307:127.0.0.1:3306 [email protected] sleep 60 >> logfile
下面是我无法弄清楚的教程的一部分。 我试过做ssh-keygen并将公钥/私钥存储在我的/home/someuser/.ssh/authorized_keys和authorized_keys.pub文件中。 但无济于事:(谢谢你的帮助。
避免密码提示:通常,在发出类似上面的命令后,您将收到密码提示,以validationlogin到远程计算机的用户。 同样,这对于自动化来说也是不利的,因为使用命令行提示符(或者存储纯文本密码)来交互应用程序并不是一个好主意。 在这种情况下,公钥encryption又来了。 如果远程用户的公共证书存储在正在login的远程用户帐户的〜/ .ssh / authorized_keys文件中,SSH将不会提示input密码。 我们只需将公钥添加到该文件中,密码提示不再是问题。
不,没有〜/ .ssh / authorized_keys.pub文件,不要把你的私钥放在authorized_keys中! 您的私钥只能在生成的文件中,并且不能放在其他地方(也许只有备份)。
你需要做的是,首先在你的本地主机上启动ssh命令,然后使用ssh-keygen创build密钥,不pipe你是否使用密码,但是请记住,任何人在没有密码的情况下获取这个私钥也将能够login。 所以保持私密 。
然后在远程主机上用这个密钥login,在〜/ .ssh / authorized_keys中input生成的密钥id_dsa.pub的公共部分(或者你得到的名字)。
这将做到这一点。 请记住,由于ssh强制安全,所以文件权限是非常重要的。 阅读“文件”一节
man ssh
我明白你的意思。 我认为openssh.org上的指示大致如泥浆般清晰。 简单的版本是这样的:
从客户端机器上的用户开始,该用户机器将ssh_ing到remote.server.com。 在那里运行ssh-keygen。 当它要求您input密码时,请按回车。
将文件.ssh / id_rsa.pub(或id_dsa.pub,取决于您的encryptiontypes)复制到remote.server.com,然后将此文件的内容附加到〜someuser / .ssh / authorized_keys。 您也可以编辑此文件,然后将id_rsa.pub的内容粘贴到authorized_keys的末尾。
通过从客户端机器(作为您运行ssh_keygen的用户)sshing来testing这个到[email protected]。 它不应该要求你input密码。 如果是的话,那么可能会有一些权限问题(〜someuser / .ssh以及〜someuser / .ssh / authorized_keys的权限应该是600)或remote.server.com上的日志。 您也可以在debugging模式(sshd -d)下运行remote.server.com上的ssh服务器,看看它在做什么。
由于您在此密钥上没有使用密码,因此请确保您不要与其他人共享此密钥。 如果在初始设置之后出现主机密钥指纹或“中间人”攻击的错误,请拒绝连接到此服务器! 任何自动化的任务将失败,这样的错误和公共密钥将不会被发送。 唯一合法的情况下,你会想要苦苦解决这样的错误(openssh客户端会给你指示如何做到这一点)是当服务器上的密钥指纹改变,通常是由于该服务器上的SSH升级。 如果您不是远程服务器的pipe理员,请直接联系该人员,并在更改主机密钥数据库之前询问其服务器上是否有任何更改。
没有提到惊讶的ssh-copy-id – 它使它变得简单。
ssh-copy-id [email protected]