anu*_*ava 163 unix ssh bash shell sftp
我需要使用Linux主机上的sftp将日志文件传输到远程主机.我的操作组已经为我提供了相同的凭据.但是,由于我无法控制其他主机,因此无法与其他主机生成和共享RSA密钥.
那么有没有办法sftp
从Bash脚本中通过cron作业运行命令(提供用户名/密码)?
我发现了类似的Stack Overflow问题,在Bash脚本中指定sftp的密码,但我的问题没有令人满意的答案.
anu*_*ava 170
除了使用公钥认证之外,您还有一些选择:
如果您决定给sshpass一个机会,那么这是一个可行的脚本片段:
export SSHPASS=your-password-here
sshpass -e sftp -oBatchMode=no -b - sftp-user@remote-host << !
cd incoming
put your-log-file.log
bye
!
Run Code Online (Sandbox Code Playgroud)
小智 91
另一种方法是使用lftp:
lftp sftp://user:password@host -e "put local-file.name; bye"
Run Code Online (Sandbox Code Playgroud)
此方法的缺点是计算机上的其他用户可以从类似工具读取密码ps
,并且密码可以成为shell历史记录的一部分.
自LFTP 4.5.0起可用的更安全的替代方案是设置LFTP_PASSWORD
环境变量并执行lftp --env-password
.这是一个完整的例子:
LFTP_PASSWORD="just_an_example"
lftp --env-password sftp://user@host -e "put local-file.name; bye"
Run Code Online (Sandbox Code Playgroud)
LFTP还包括一个很酷的镜像功能(可以包括确认传输后删除' - Remove-source-files'):
lftp -e 'mirror -R /local/log/path/ /remote/path/' --env-password -u user sftp.foo.com
Run Code Online (Sandbox Code Playgroud)
rez*_*ter 50
Expect是一个很棒的程序.
在Ubuntu上安装它:
sudo apt-get install expect
Run Code Online (Sandbox Code Playgroud)
在CentOS机器上安装它:
yum install expect
Run Code Online (Sandbox Code Playgroud)
假设您要连接到sftp服务器,然后将本地文件从本地计算机上载到远程sftp服务器
#!/usr/bin/expect
spawn sftp username@hostname.com
expect "password:"
send "yourpasswordhere\n"
expect "sftp>"
send "cd logdirectory\n"
expect "sftp>"
send "put /var/log/file.log\n"
expect "sftp>"
send "exit\n"
interact
Run Code Online (Sandbox Code Playgroud)
这将打开与您的服务器密码的sftp连接.
然后它会转到您要上传文件的目录,在本例中为"logdirectory"
这会从/ var/log /中找到的本地目录上传日志文件,文件名为file.log,远程服务器上的"logdirectory"
Mik*_* S. 23
您可以在shell脚本中以交互方式使用lftp,以便通过执行以下操作将密码保存在.bash_history或类似内容中:
vi test_script.sh
Run Code Online (Sandbox Code Playgroud)
将以下内容添加到您的文件中:
#!/bin/sh
HOST=<yourhostname>
USER=<someusername>
PASSWD=<yourpasswd>
cd <base directory for your put file>
lftp<<END_SCRIPT
open sftp://$HOST
user $USER $PASSWD
put local-file.name
bye
END_SCRIPT
Run Code Online (Sandbox Code Playgroud)
在编辑put文件输入的主机,用户,传递和目录后编写/退出vi编辑器:wq
.然后使脚本可执行chmod +x test_script.sh
并执行它./test_script.sh
.
小智 17
我最近被要求从ftp切换到sftp,以确保服务器之间的文件传输安全.我们正在使用Tectia SSH软件包,它可以选择--password
在命令行上传递密码.
例如: sftp --password="password" "userid"@"servername"
批处理示例:
(
echo "
ascii
cd pub
lcd dir_name
put filename
close
quit
"
) | sftp --password="password" "userid"@"servername"
Run Code Online (Sandbox Code Playgroud)
我想我应该分享这些信息,因为我在运行help命令(sftp -h
)之前查看了各种网站,并且我很惊讶地看到密码选项.
Sri*_*niV 17
您可以通过启用无密码验证来覆盖.但是你应该在开始之前安装密钥(pub,priv).
在本地服务器上执行以下命令.
Local $> ssh-keygen -t rsa
Run Code Online (Sandbox Code Playgroud)
按ENTER键以显示所有选项.不需要键入任何值.
Local $> cd .ssh
Local $> scp .ssh/id_rsa.pub user@targetmachine:
Prompts for pwd$> ENTERPASSWORD
Run Code Online (Sandbox Code Playgroud)
使用以下命令连接到远程服务器
Local $> ssh user@targetmachine
Prompts for pwd$> ENTERPASSWORD
Run Code Online (Sandbox Code Playgroud)
在远程服务器上执行以下命令
Remote $> mkdir .ssh
Remote $> chmod 700 .ssh
Remote $> cat id_rsa.pub >> .ssh/authorized_keys
Remote $> chmod 600 .ssh/authorized_keys
Remote $> exit
Run Code Online (Sandbox Code Playgroud)
在本地服务器上执行以下命令以测试无密码身份验证.它应该没有密码连接.
$> ssh user@targetmachine
Run Code Online (Sandbox Code Playgroud)
ASa*_*our 17
我发现实现此目的的最简单方法是结合使用CURL和SFTP ,而无需安装任何第三方库(例如Expect、SSHPASS ...等) 。这两个几乎存在于每台 Linux 机器中。
这是更改值后应执行的命令。
curl -k "sftp://SERVER_IP:SERVER_PORT/FULL_PATH_OF_THE_FILE" --user "SERVER_USER:SERVER_PASSOWRD" -o "THE_NAME_OF_THE_FILE_AFTER_DOWNLOADING_IT"
Run Code Online (Sandbox Code Playgroud)
例子:
curl -k "sftp://10.10.10.10:77/home/admin/test.txt" --user "admin:123456" -o "test.txt"
Run Code Online (Sandbox Code Playgroud)
解释:
我们使用用户名admin和密码123456连接到服务器10.10.10.10:77,将文件/home/admin/test.txt从该服务器移动到您当前用于执行上述命令的服务器。
Bash程序等待sftp要求输入密码,然后将其发送:
#!/bin/bash
expect -c "
spawn sftp username@your_host
expect \"Password\"
send \"your_password_here\r\"
interact "
Run Code Online (Sandbox Code Playgroud)
您可能需要安装Expect,将“密码”的措词更改为小写字母“ p”,以匹配您的提示收到的内容。这里的问题在于,它以纯文本形式在文件以及命令历史记录中公开您的密码。首先,这几乎破坏了拥有密码的目的。
您可以使用sshpass.以下是步骤
sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps
归档时间: |
|
查看次数: |
592631 次 |
最近记录: |