2014-12-02 83 views
0

我必须处理一个相当烦人的情况。我必须使用scp从一台服务器通过shell脚本将文件传输到另一台服务器。问题是我没有任何一个root权限。我不允许安装任何软件包,例如sshpass,ssh2,expect等。我甚至没有在第二台服务器上必须使用的用户主目录下的写权限。存储〜/ .ssh以外的私钥

由于我不能使用sshpass等来启用我的脚本输入登录凭据,我想过使用ssh密钥对进行身份验证。其实这是我的第一个想法,但由于第二台服务器上的用户在其主目录中没有写权限,但只在后续目录中,所以ssh-keygen失败,因为它无法将密钥放入〜/ .ssh中。

这两个都是Debian服务器btw。

有没有什么办法可以生成ssh密钥对并在〜/ .ssh之外使用它?

任何帮助,非常感谢。

+0

你可以在目标系统上运行该脚本,并且该文件是_pull_? – Andras 2014-12-02 04:49:00

回答

0

在客户端是的。但是,在服务器端,除非以不同的方式配置,否则sshd会期望您在该目录中的凭据。

如果您可以从不能访问.ssh的服务器到您可以访问的服务器,可以使用-i选项指定密钥文件的位置。

您是否有其他运输机制?你可以把filn放到你的public_html上,并把它放在另一边?

0

您可以在任何地方使用密钥对。关键是权限在密钥对上正确设置。所有权需要设置为用户chown user:user keyfile,权限必须为chmod 400 keyfile

将密钥移动并设置权限后,剩下的就是告诉scp使用哪个密钥。您可以通过使用-i标志来完成此操作。

IE:scp /source/file [email protected]:/target/location/ -i keyfile

编辑: 作为Amadan提到他的答案 - 这是假设你正在连接服务器已经有了密钥对用户授权密钥。如果不是,则需要更改/ etc/ssh/sshd_config,只有具有正确访问权限的用户才能执行此操作。如果你的用户现在可以访问它,那么在服务器上尝试cat/etc/ssh/sshd_config可能是值得的。如果您有阅读权限,则您将能够辨别预期的authorized_keys位置。服务器管理员可能已经将预期的关键位置定制为您有权访问的内容。