在Linux中,使用SFTP(SSH File Transfer Protocol)进行自动化脚本操作可以通过多种方式实现。以下是几种常见的方法:
sshpass
和expect
sshpass
可以用来非交互式地输入SSH密码,而expect
可以用来自动化交互式命令。
安装sshpass
和expect
:
sudo apt-get install sshpass expect
编写自动化脚本:
创建一个名为sftp_auto.sh
的脚本文件,并添加以下内容:
#!/usr/bin/expect -f
set timeout -1
set host [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
set remote_dir [lindex $argv 3]
set local_dir [lindex $argv 4]
spawn sftp $user@$host
expect "password:"
send "$password\r"
expect "sftp>"
# Change to remote directory
send "cd $remote_dir\r"
expect "sftp>"
# Put files from local to remote
send "put $local_dir/*\r"
expect "sftp>"
# Get files from remote to local
send "get *\r"
expect "sftp>"
# Close SFTP session
send "bye\r"
expect eof
赋予脚本执行权限:
chmod +x sftp_auto.sh
运行脚本:
./sftp_auto.sh your_host your_user your_password /remote/directory /local/directory
使用SSH密钥认证可以避免每次都输入密码,更加安全。
生成SSH密钥对(如果还没有):
ssh-keygen -t rsa
将公钥复制到远程服务器:
ssh-copy-id user@host
编写自动化脚本:
创建一个名为sftp_auto_ssh_key.sh
的脚本文件,并添加以下内容:
#!/bin/bash
host="your_host"
user="your_user"
remote_dir="/remote/directory"
local_dir="/local/directory"
sftp $user@$host <<EOF
cd $remote_dir
put $local_dir/*
get *
bye
EOF
4. **赋予脚本执行权限**:
```bash
chmod +x sftp_auto_ssh_key.sh
./sftp_auto_ssh_key.sh
lftp
lftp
是一个功能强大的文件传输工具,支持SFTP协议,并且可以通过脚本进行自动化操作。
安装lftp
:
sudo apt-get install lftp
编写自动化脚本:
创建一个名为lftp_auto.sh
的脚本文件,并添加以下内容:
#!/bin/bash
host="your_host"
user="your_user"
password="your_password"
remote_dir="/remote/directory"
local_dir="/local/directory"
lftp -e "
open sftp://$user:$password@$host;
cd $remote_dir;
put $local_dir/*;
get *;
quit;
"
赋予脚本执行权限:
chmod +x lftp_auto.sh
运行脚本:
./lftp_auto.sh
sshpass
和expect
时,密码会以明文形式出现在脚本中,存在安全风险。建议使用SSH密钥认证。ssh-agent
。通过以上方法,你可以实现Linux SFTP的自动化脚本操作,提高工作效率。