如何将密码传递给scp?

linux scp io-redirection

579742 观看

15回复

2555 作者的声誉

我知道不推荐这样做,但是是否可以将用户密码传递给scp?

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

作者: Argelbargel 的来源 发布者: 2008 年 9 月 8 日

回应 (15)


27

139942 作者的声誉

决定

您就可以使用一个工具脚本它希望(有得心应手绑定太像Pexpect的为Python)。

作者: Pat Notz 发布者: 08.09.2008 04:38

10

35122 作者的声誉

这是使用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;
}
作者: Espo 发布者: 08.09.2008 04:42

0

4381 作者的声誉

一种替代方法是将用户密钥的公共一半添加到目标系统上的授权密钥文件中。在要从其开始传输的系统上,可以运行ssh-agent守护程序并将密钥的私有一半添加到代理。然后可以将批处理作业配置为使用代理获取私钥,而不是提示输入密钥密码。

这应该可以在UNIX / Linux系统上或使用Pageant和pscp的Windows平台上执行。

作者: rjray 发布者: 16.09.2008 08:16

34

561 作者的声誉

如果要从Windows连接到服务器,则使用Putty版本的scp(“ pscp”)可以通过-pw参数传递密码。

这里的文档中提到了这一点。

作者: gWay 发布者: 30.11.2010 02:41

42

1472 作者的声誉

只需生成一个ssh密钥,例如:

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

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

确保远程计算机具有权限,0700 for ~./ssh folder并且0600 for ~/.ssh/authorized_keys

作者: mustafaturan 发布者: 21.02.2012 10:17

458

5167 作者的声誉

使用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
    • brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master‌​/Library/Formula/ssh‌​pass.rb
作者: KevinS 发布者: 19.12.2012 03:17

20

206 作者的声誉

您可以在Unix /终端上使用'expect'脚本

例如创建'test.exp':

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

运行脚本

expect test.exp 

希望对您有所帮助。

作者: Prabhjeet 发布者: 16.01.2013 03:01

-9

5092 作者的声誉

在这里,我发现这个答案很有帮助。

rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/

您不仅可以在此处传递密码,而且在复制时还会显示进度条。非常棒。

作者: valk 发布者: 25.02.2014 07:08

2

106 作者的声誉

  1. 确保您拥有“期望”工具,如果没有,请先做

    # apt-get install expect

  2. 创建具有以下内容的脚本文件。(#vi / root / scriptfile)

    spawn scp /path_from/file_name user_name_here@to_host_name:/path_to

    expect "password:"

    send put_password_here\n;

    interact

  3. 使用“期望”工具执行脚本文件

    # expect /root/scriptfile

作者: Kevin Chui 发布者: 21.03.2014 06:04

7

71 作者的声誉

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

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

作者: galushka 发布者: 13.05.2015 05:16

3

39 作者的声誉

您可以ssh-copy-id用来添加ssh密钥:

$which ssh-copy-id #check whether it exists

如果存在:

ssh-copy-id  "user@remote-system"
作者: Shen JI 发布者: 22.11.2016 09:35

2

749 作者的声誉

ssh-keygen按照上述说明进行设置后,您就可以

scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

如果您想减少每次键入的次数,则可以修改.bash_profile文件并放入

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

然后从您的终端上做source ~/.bash_profile。之后,如果您输入remote_scp终端,它将在scp没有密码的情况下运行命令。

作者: hi15 发布者: 20.10.2017 07:08

18

181 作者的声誉

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

curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/
作者: MBerg 发布者: 16.11.2017 11:28

-3

11 作者的声誉

sshpass的步骤对于rhel / centos 6:

# wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install sshpass

来源:https : //community.mapr.com/thread/9040

作者: Long 发布者: 19.02.2018 06:17

0

1 作者的声誉

仅当您安装了该应用程序或您应该具有管理员权限才能安装上述所有解决方案,或者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/

作者: Yash 发布者: 05.09.2019 02:18
32x32