我知道不建议这样做,但是是否有可能将用户的密码传递给scp?

我想通过scp复制一个文件,作为批处理作业的一部分,接收服务器当然需要密码,不,我不能轻易地将其更改为基于密钥的身份验证。


当前回答

上面提到的所有解决方案都可以工作,只有当你安装了应用程序,或者你应该有管理权限安装除sshpass。

我发现这个非常有用的链接可以简单地在后台启动scp。

$ nohup scp file_to_copy user@server:/path/to/copy/the/file > nohup.out 2>&1

https://charmyin.github.io/scp/2014/10/07/run-scp-in-background/

其他回答

下面是一个如何使用expect工具的示例:

sub copyover {
    $scp = Expect->spawn("/usr/bin/scp ${srcpath}/$file $who:${destpath}/$file");
    $scp->expect(30,"ssword: ") || die "Never got password prompt from $dest:$!\n";
    print $scp 'password' . "\n";
    $scp->expect(30,"-re",'$\s') || die "Never got prompt from parent system:$!\n";
    $scp->soft_close();
    return;
}

如果你观察到一个严格的主机密钥检查错误,那么使用-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null选项。

完整示例如下 sshpass -p "password" scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@domain-name.com:/tmp/from/psoutput /tmp/to/psoutput

您可以使用以下步骤。这对我很管用!

步骤1 - 创建一个普通的文件,假设“fileWithScpPassword”,其中包含目标服务器的ssh密码。

Step2-使用sshpaas -f后跟密码文件名,然后是正常的scp命令。

sshpass -f“scppassword”scp / filepathtou上传user@ip:/目的地目的地/

Curl可以用作SCP的替代方案来复制文件,并且它支持在命令行上设置密码。

curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/

没有人提到它,但是Putty scp (pscp)有一个-pw选项作为密码。

文档可以在这里找到:https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp