Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Bash脚本中指定sftp的密码_Bash_Sftp_Remote Backup_.netrc - Fatal编程技术网

在Bash脚本中指定sftp的密码

在Bash脚本中指定sftp的密码,bash,sftp,remote-backup,.netrc,Bash,Sftp,Remote Backup,.netrc,我正在尝试编写一个脚本来通过SFTP备份文件。问题是,它需要一个密码,我认为没有办法手动指定SFTP的密码。我听说过使用公钥不需要密码,但这需要能够通过ssh连接到远程服务器并修改一些配置文件,而我不能这样做 目前我的解决方案是使用,但这是不安全的(使用普通FTP)。我还查看了.netrc文件,但这似乎是FTP文件,而不是SFTP文件。如何手动为sftp指定密码?为了使用公钥,您不需要修改任何“配置文件”。您只需将公钥的副本留在ssh知道查看的地方(通常~/.ssh/authorized_key

我正在尝试编写一个脚本来通过SFTP备份文件。问题是,它需要一个密码,我认为没有办法手动指定SFTP的密码。我听说过使用公钥不需要密码,但这需要能够通过ssh连接到远程服务器并修改一些配置文件,而我不能这样做


目前我的解决方案是使用,但这是不安全的(使用普通FTP)。我还查看了
.netrc
文件,但这似乎是FTP文件,而不是SFTP文件。如何手动为sftp指定密码?

为了使用公钥,您不需要修改任何“配置文件”。您只需将公钥的副本留在ssh知道查看的地方(通常
~/.ssh/authorized_keys
)。您可以使用sftp来实现这一点。如果尚未在服务器上建立任何授权密钥文件,只需将id_rsa.pub文件放在相应位置即可。

您无法从命令行指定ssh/scp或sftp的密码。连接时不提示输入密码的唯一方法是使用公钥身份验证


您说您不能通过ssh连接到服务器来修改配置文件,但是如果您可以将sftp连接到服务器,您可能可以上传您的公钥


您的公钥必须位于主目录中的.ssh目录下。

Lftp允许为ftp和sftp指定密码,并且根本不需要公钥。您的sh sync脚本可能如下所示:

#!/bin/sh
# Define folders
THEFOLDER='/mnt/my/folder'
# List files
THEFILES=`ls -p $THEFOLDER | grep -v "/"`

for file in $THEFILES
do
  echo "Processing $file"
  lftp -u login,password -e "put $THEFOLDER/$file;quit"  theftp/sub/folder
done

cURL可以支持sftp,如下所述:


Bash程序等待sftp请求密码,然后发送密码:

#!/bin/bash
expect -c "
spawn sftp username@your_host
expect \"assword\"
send \"your_password_here\r\"
interact "
chmod +x sftp_autologin.sh
./sftp_autologin.sh
#!/bin/bash
expect -c "
spawn sftp myuser@myserver.com
expect \"assword\"
send \"yourpassword\r\"
expect \"sftp\"
send \"get your_directory/yourfilename.txt\r\"
expect \"sftp\"
send \"exit\r\"
interact "
将其放入名为
sftp\u autologin.sh
的文件中。
\r
向sftp发送一个命令以执行该命令。我不在密码中包含“p”,因为在某些系统中它是大写的,而在其他系统中是小写的。expect生成sftp命令。等待字符串“assword”出现并发送命令。然后结束

要使其正常工作,请执行以下操作:

  • 安装expect,我使用的是5.44.1.15
  • 确保您可以在交互模式下sftp到您的邮箱并提供密码
  • 确保此bash脚本具有可执行权限
  • 然后运行它:

    #!/bin/bash
    expect -c "
    spawn sftp username@your_host
    expect \"assword\"
    send \"your_password_here\r\"
    interact "
    
    chmod +x sftp_autologin.sh
    ./sftp_autologin.sh
    
    #!/bin/bash
    expect -c "
    spawn sftp myuser@myserver.com
    expect \"assword\"
    send \"yourpassword\r\"
    expect \"sftp\"
    send \"get your_directory/yourfilename.txt\r\"
    expect \"sftp\"
    send \"exit\r\"
    interact "
    
    它应该让您进入sftp命令行,而不提示您输入密码

    它不安全吗?

    这是您可以运行的最不安全的命令。它将密码暴露于命令行历史记录中,暴露于任何可以读取“ps”输出的人,并且基本上破坏了密码的全部用途

    但是,嘿,这场骗局的另一个记录是什么呢?受害者每年的损失只有大约2500亿美元。我们去买500b吧

    这会自动使用sftp shell运行一些命令,并在完成后自动退出:

    #!/bin/bash
    expect -c "
    spawn sftp username@your_host
    expect \"assword\"
    send \"your_password_here\r\"
    interact "
    
    chmod +x sftp_autologin.sh
    ./sftp_autologin.sh
    
    #!/bin/bash
    expect -c "
    spawn sftp myuser@myserver.com
    expect \"assword\"
    send \"yourpassword\r\"
    expect \"sftp\"
    send \"get your_directory/yourfilename.txt\r\"
    expect \"sftp\"
    send \"exit\r\"
    interact "
    

    您可能还想考虑使用Python(PARAMIKO模块),因为它可以很快从shell调用。 安装模块 FTP上载脚本示例


    “如果你可以将sftp上传到服务器,你可能可以上传你的公钥。”不。你可能会惊讶地发现,当你不能上传正确的密钥时,这种情况是多么普遍。步骤如下:您可以使用ssh-keygen,然后使用ssh-copy-id-i~/.ssh/id\u rsa.pub,就完成了。它会自动将其附加到授权密钥。因此根本不需要将其放入BASH脚本中。只需ssh或scp命令,它们就可以在没有提示的情况下工作。