我需要从Linux主机使用sftp传输日志文件到远程主机。我的行动组也向我提供了同样的证书。但是,由于我没有对其他主机的控制权,我不能生成并与其他主机共享RSA密钥。

那么,是否有一种方法可以从Bash脚本内部通过cron作业运行sftp命令(提供用户名/密码)?

我发现一个类似的堆栈溢出问题,指定密码sftp在Bash脚本,但没有满意的答案,我的问题。


当前回答

你可以使用sshpass。以下是步骤

安装sshpass For Ubuntu - sudo apt-get Install sshpass 如果是第一次,将远程IP添加到您的已知主机文件中 对于Ubuntu -> ssh user@IP ->输入“yes” 给出一个SCP和sshpass的组合命令。 下面是远程tomcat的战争处理示例代码 scp /home/ubuntu/latest_build/abc战# user@ # RemoteIP: / var / lib / tomcat7 / webapps

其他回答

我最近被要求从ftp切换到sftp,以确保服务器之间的文件传输安全。我们使用的是Tectia SSH包,它有一个选项——password,可以在命令行上传递密码。

example: sftp——密码=“用户密码”

批处理示例:

(
  echo "
  ascii
  cd pub
  lcd dir_name
  put filename
  close
  quit
    "
) | sftp --password="password" "userid"@"servername"

我想我应该分享这个信息,因为我正在看各种网站,在运行帮助命令(sftp -h)之前,我很惊讶地看到密码选项。

另一种方法是使用lftp:

lftp sftp://user:password@host  -e "put local-file.name; bye"

这种方法的缺点是,计算机上的其他用户可以从ps等工具读取密码,并且密码可能成为您的shell历史记录的一部分。

自LFTP 4.5.0以来,一个更安全的替代方法是设置LFTP_PASSWORD环境变量,并使用——env-password执行LFTP。下面是一个完整的例子:

export LFTP_PASSWORD="just_an_example"
lftp --env-password sftp://user@host  -e "put local-file.name; bye"

# Destroy password after use
export LFTP_PASSWORD=""

LFTP还包括一个很酷的镜像功能(可以包括确认传输后删除—Remove-source-files):

lftp -e 'mirror -R /local/log/path/ /remote/path/' --env-password -u user sftp.foo.com

你可以使用sshpass。以下是步骤

安装sshpass For Ubuntu - sudo apt-get Install sshpass 如果是第一次,将远程IP添加到您的已知主机文件中 对于Ubuntu -> ssh user@IP ->输入“yes” 给出一个SCP和sshpass的组合命令。 下面是远程tomcat的战争处理示例代码 scp /home/ubuntu/latest_build/abc战# user@ # RemoteIP: / var / lib / tomcat7 / webapps

您可以通过启用无密码身份验证来覆盖。但是你应该先安装密钥(pub, priv)。

在本地服务器上执行以下命令。

Local $> ssh-keygen -t rsa 

按ENTER键显示所有选项。不需要输入任何值。

Local $> cd .ssh
Local $> scp .ssh/id_rsa.pub user@targetmachine:
Prompts for pwd$>  ENTERPASSWORD

使用以下命令连接到远程服务器

Local $> ssh user@targetmachine
Prompts for pwd$> ENTERPASSWORD

在远程服务器上执行以下命令

Remote $> mkdir .ssh
Remote $> chmod 700 .ssh
Remote $> cat id_rsa.pub >> .ssh/authorized_keys
Remote $> chmod 600 .ssh/authorized_keys
Remote $> exit

在本地服务器上执行以下命令测试无密码身份验证。 连接时应该没有密码。

$> ssh user@targetmachine

您可以使用带有scp和os库的Python脚本进行系统调用。

Ssh-keygen -t rsa -b 2048(本机) ssh-copy-id user@remote_server_address 创建一个像这样的Python脚本:

    import os
    cmd = 'scp user@remote_server_address:remote_file_path local_file_path'
    os.system(cmd)

在crontab中创建一个规则来自动化您的脚本 完成