当前位置:  开发笔记 > 编程语言 > 正文

如何将密码传递给scp?

如何解决《如何将密码传递给scp?》经验,为你挑选了8个好方法。

我知道不推荐,但是可以将用户的密码传递给scp吗?

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



1> KevinS..:

使用sshpass:

sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path

或者,密码不会显示在bash历史记录中

sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path

以上复制从远程主机到本地的路径内容.

安装:

Ubuntu的/ Debian的

apt install sshpass

CentOS的/ Fedora的

yum install sshpass

mac w/macports

port install sshpass

mac w/brew

brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master??/Library/Formula/ssh??pass.rb


最安全的方法是使用密码*文件*,如下所示:`sshpass -f`passwdfile` scp [...]`.这样,密码就不会显示在"ps"列表等中,您可以使用文件权限保护密码.
在Ubuntu 12.04上,它仅对我使用密码的单引号(例如'密码'而不是"密码").
这是你安装sshpass`apt-get install sshpass`的方法
@odedfos,是的你需要使用单引号,因为一些密码生成的字符可以在双引号字符串插值中有一个特殊的解释
在CentOS上,它是`yum -y install sshpass`
不使用sshpass时,scp显示进度。有可能找回来吗?
在OSX`brew上安装https:// raw.githubusercontent.com / kadwanev / bigboybrew / master / Library / Formula / sshpass.rb`
它可以工作,但是`scp`的控制台输出是隐藏的。

2> mustafaturan..:

只需生成一个ssh键,如:

ssh-keygen -t rsa -C "your_email@youremail.com"

复制内容~/.ssh/id_rsa.pub 并最后将其添加到远程计算机~/.ssh/authorized_keys

确保远程计算机具有权限0700 for ~./ssh folder0600 for ~/.ssh/authorized_keys


正如我写的:不,我不能轻易切换到基于密钥的身份验证.
你的意思是.authorized_keys而不是.authorization_keys?
对此的有效用法是bash脚本,它对服务器执行多次scp/ssh调用,您要在其中询问用户远程服务器的密码.密码将不会显示在历史记录中,您仍然可以挑战密码...但只有一次.我不想使用密钥文件,因为我还想验证脚本用户.
如果您无法轻松地在目标上启用基于密钥的身份验证,则将是另一种有效的用法。示例:NAS的主要生产商之一-带有DSM 6.0的Synology甚至在2016年也不支持它。当然,您可能会弄乱配置文件,并希望更新不会再次覆盖它(频繁更新DSM确实会破坏自定义修改) )。有时候-特别是当OP明确写出他们已经意识到这不是最佳方法时-人们只需要一个解决方案。
您应该使用ssh-copy-id -i〜/ .ssh / id_rsa.pub <remote_server>复制密钥到远程服务器上

3> 小智..:

如果从Windows连接到服务器,则scty("pscp")的Putty版本允许您使用-pw参数传递密码.

这在这里的文档中提到.



4> Pat Notz..:

您可以使用期望的工具编写脚本(也有方便的绑定,例如Pexpect for Python).



5> 小智..:

curl可以用作scp的替代方法来复制文件,它支持命令行上的密码.

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



6> Prabhjeet..:

您可以在unix/terminal上使用'expect'脚本

例如,创建'test.exp':

#!/usr/bin/expect
        spawn scp  /usr/bin/file.txt root@:/home
        set pass "Your_Password"
        expect {
        password: {send "$pass\r"; exp_continue}
                  }

运行脚本

expect test.exp 

我希望有所帮助.


先决条件:sudo apt-get install expect

7> Espo..:

以下是使用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;
}


这是在perl,对不起,我没有写.(5年前 :) )

8> 小智..:

没有人提到它,但是Putty scp(pscp)有一个-pw选项用于输入密码.

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


5年前在[user524607的回答](http://stackoverflow.com/a/4310068/1491895)中提到过它.
推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有