如何将密码传递给 scp?

2024-10-09 09:10:00
admin
原创
251
摘要:问题描述:我知道不推荐这样做,但是是否有可能将用户密码传递给 scp?我想通过 scp 复制文件作为批处理作业的一部分,并且接收服务器当然需要密码,不,我无法轻易将其更改为基于密钥的身份验证。解决方案 1:使用sshpass:sshpass -p "password" sc...

问题描述:

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

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


解决方案 1:

使用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`
  • 带 macports 的 mac

+ `port install sshpass`
  • 使用 brew 的 mac

+ `brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb`

解决方案 2:

只需生成一个 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

解决方案 3:

如果您从 Windows 连接到服务器,Putty 版本的 scp(“pscp”)允许您通过-pw参数传递密码。

此处的文档中提到了这一点。

解决方案 4:

curl 可以作为 scp 的替代品来复制文件,并且它支持在命令行上输入密码。

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

解决方案 5:

您可以使用诸如expect之类的工具来编写脚本(也有方便的绑定,例如Pexpect for Python)。

解决方案 6:

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

例如创建“test.exp”:

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

运行脚本

expect test.exp 

我希望这能有所帮助。

解决方案 7:

您可以使用以下方式ssh-copy-id添加 ssh 密钥:

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

如果存在:

ssh-copy-id  "user@remote-system"

解决方案 8:

以下是如何使用工具执行此操作的示例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:$!
";
    print $scp 'password' . "
";
    $scp->expect(30,"-re",'$s') || die "Never got prompt from parent system:$!
";
    $scp->soft_close();
    return;
}

解决方案 9:

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

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

解决方案 10:

按照上面的说明进行设置后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在没有密码的情况下运行命令。

解决方案 11:

这是基于这篇博客文章的穷人版 Linux/Python/Expect 示例:将简单 shell 升级为完全交互式 TTY。我需要这个功能,因为旧机器无法安装 Expect 或向 Python 添加模块。

代码:

(
    echo 'scp jmudd@mysite.com:./install.sh .'
    sleep 5
    echo 'scp-passwd'
    sleep 5
    echo 'exit'
) |

python -c 'import pty; pty.spawn("/usr/bin/bash")'

输出:

scp jmudd@mysite.com:install.sh .
bash-4.2$ scp jmudd@mysite.com:install.sh .
Password: 
install.sh                                 100%   15KB 236.2KB/s   00:00    
bash-4.2$ exit
exit

解决方案 12:

  1. 确保之前有“expect”工具,如果没有,请执行此操作

# apt-get install expect

  1. 创建包含以下内容的脚本文件。(# vi /root/scriptfile)

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

expect "password:"

`send put_password_here
;`

interact

  1. 使用“expect”工具执行脚本文件

# expect /root/scriptfile

解决方案 13:

  1. 确保目标服务器上启用了密码验证。如果它运行的是 Ubuntu,则/etc/ssh/sshd_config在服务器上打开,找到行PasswordAuthentication=no并将其全部注释掉(放在#行的开头),保存文件并运行sudo systemctl restart ssh以应用配置。如果没有这样的行,那么您就完成了。

  2. 添加-o PreferredAuthentications="password"到您的scp命令,例如:

scp -o PreferredAuthentications="password" /path/to/file user@server:/destination/directory

解决方案 14:

将文件从一台服务器复制到另一台服务器(在脚本上)

在ubuntu或者其他Linux机器上安装putty。putty自带pscp,我们可以用pscp复制文件。

apt-get update
apt-get install putty 
echo n |  pscp -pw "Password@1234" -r user_name@source_server_IP:/copy_file_path/files /path_to_copy/files

有关更多选项,请参阅 pscp 帮助。

解决方案 15:

与 powershell 和 Posh-SSH 配合良好。Powershell 核心应该得到支持

Import-Module "C:    mpPosh-SSH.0.8Posh-SSH.psd1" # https://github.com/darkoperator/Posh-SSH/releases

# Connect with pubkey authentication, providing the Passphrase non-interactive, and accepting any remote pubkey
$sftpSession = New-SFTPSession -ComputerName example.com -Credential $keyFilePassphrase -KeyFile "C:PathToprivate_key" -AcceptKey

# Write file to remote
Set-SFTPItem -SessionId $sftpSession.SessionID -Path C:    mp    est.txt -Destination "/home/user/"

您还可以使用期望:

#!/usr/bin/expect

spawn scp user@host:/source user@host2:/target
expect "password"
send -- "$PASSWORD
"
interact

安装 expect 并运行脚本

sudo apt install expect -y
chmod +x /usr/local/bin/update-file.exp
/usr/local/bin/update-file.exp

解决方案 16:

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

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

步骤2-使用sshpaas -f后跟密码文件名,然后使用正常 scp 命令。

sshpass -f "fileWithScpPassword" scp /filePathToUpload 用户@ip:/destinationPath/

解决方案 17:

由于标题中没有不使用基于密钥的身份验证,以下步骤将帮助可以切换到基于密钥的身份验证的用户。它跳过了 scp 和 ssh 的密码。

将你的 ssh 公钥复制到服务器(注意不要覆盖授权密钥)

scp ~/.ssh/id_rsa.pub user@remoteIP:~/.ssh/authorized_keys

更改权限:

chmod 600 authorized_keys

请按照以下指南获取更多详细信息:
https://idratherbewriting.com/jekylldoctheme-separate-outputs/mydoc/mydoc_no_password_prompts_scp.html

解决方案 18:

如果您发现严格的主机密钥检查错误,请使用-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

解决方案 19:

我这样做的一个简单方法是:

使用与 ssh 密钥相同的 scp 命令,即

scp -C -i <path_to opens sshkey> <'local file_path'> user@<ip_address_VM>: <'remote file_path’>

用于将文件从本地传输到远程

但不要提供正确的 <path_to_opensshkey>,而是使用一些垃圾路径。由于密钥路径错误,系统会要求您输入密码,您现在只需输入密码即可完成工作!

解决方案 20:

另一种方法是将用户密钥的公钥部分添加到目标系统上的授权密钥文件中。在启动传输的系统上,您可以运行 ssh-agent 守护程序并将密钥的私钥部分添加到代理。然后可以配置批处理作业以使用代理获取私钥,而不是提示输入密钥的密码。

这应该可以在 UNIX/Linux 系统或 Windows 平台上使用 pageant 和 pscp 完成。

解决方案 21:

上述所有解决方案仅在您安装了应用程序或拥有安装(或 sshpass 除外)的管理员权限时才有效。

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

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

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

解决方案 22:

我发现这里的答案确实很有帮助。

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

你不仅可以在那里输入密码,而且复制时还会显示进度条。真是太棒了。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用