我必须处理一个相当恼人的情况。我必须使用scp从一个服务器到另一个服务器通过shell脚本传输文件。问题是我没有root访问权限。我不允许安装任何软件包,如sshpass,ssh2,expect等。我甚至没有在我必须在第二台服务器上使用的用户的主目录中拥有写权限。
由于我无法使用sshpass等来启用我的脚本来输入登录凭据,因此我考虑使用ssh密钥对进行身份验证。实际上这是我的第一个想法,但由于第二台服务器上的用户在其主目录中没有写权限,但只在后续目录中,ssh-keygen失败,因为它无法将密钥放入〜 /.ssh。
两者都是Debian服务器btw。
有没有办法生成一个ssh密钥对并在〜/ .ssh之外使用它?
非常感谢任何帮助。
答案 0 :(得分:0)
在客户端是的。但是,在服务器端,除非配置不同,否则sshd将在您的目录中使用您的凭据。
如果您可以从无法访问.ssh的服务器scp到您可以访问的服务器,可以使用-i选项指定密钥文件位置。
您是否有其他运输机制?你能把filn你的public_html放到另一边吗?
答案 1 :(得分:0)
您可以随时随地使用密钥对。关键是在密钥对上正确设置了权限。所有权需要设置为用户chown user:user keyfile
,权限必须为chmod 400 keyfile
。
一旦你移动了密钥并设置了权限,剩下的就是告诉scp使用哪个密钥。您可以使用-i
标记来执行此操作。
IE:scp /source/file user@host:/target/location/ -i keyfile
编辑: 正如Amadan在他的回答中提到的那样 - 这假设您连接的服务器已经将密钥作为用户的授权密钥。如果不是,则需要/ etc / ssh / sshd_config更改,只有具有正确访问权限的人才能执行此操作。如果您的用户现在可以访问它,那么在服务器上尝试cat / etc / ssh / sshd_config可能是值得的。如果您具有读取权限,则您将能够识别预期的authorized_keys位置。服务器管理员已经可以将预期的密钥位置自定义为您具有写访问权限的内容。