scp.exp脚本:scp命令自动输入密码

本文介绍了一个使用Expect脚本实现的自动化SCP文件传输工具。该工具通过scp.exp脚本简化了文件从本地到远程服务器的传输过程,并详细展示了如何安装依赖及执行脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#### 1.scp.exp用法(以ubuntu为例):


- sudo apt-get install expect

- expect scp.exp 127.0.0.1 root passwd srcfile destfile 300


#### 2.scp.exp脚本内容


```bash

#!/usr/bin/expect

#目的机器的ip

set host [lindex $argv 0]

#目的机器的用户名

set username [lindex $argv 1]

#目的机器的用户密码

set password [lindex $argv 2]

#源文件或源目录

set src_file [lindex $argv 3]

#目的文件或目的目录

set dest_file [lindex $argv 4]

#expect超时时间

set time_out [lindex $argv 5]


spawn scp -r $src_file $username@$host:$dest_file

set timeout $time_out

expect {

 "(yes/no)?"

  {

    send "yes\n"

    exp_continue

  }

 "*assword:"

  {

    send "$password\n"

    exp_continue

  }

 "ermission denied"

  {

    send_user "Copy $src_file to $dest_file failed.\n"

    exit 1

  }

  eof

  {

    send_user "Copy $src_file to $dest_file succ.\n"

    exit 0

  }

}

#expect超时

exit 2

```


### SCP自动化传输指定密码脚本实现 在 Linux 中,`scp` 命令本身并不支持直接传递明文密码的方式进行身份验证。为了实现 `scp` 的自动化传输并自动提供密码,可以借助 `expect` 工具来完成这一功能。 以下是基于 `expect` 实现 `scp` 文件传输的具体方法: #### 1. 安装 Expect 工具 确保系统已安装 `expect` 工具。如果没有安装,可以通过以下命令安装: ```bash sudo apt-get install expect # Debian/Ubuntu 系统 sudo yum install expect # CentOS/RHEL 系统 ``` #### 2. 编写 Expect 脚本 创建一个名为 `scp_expect.sh` 的脚本文件,并赋予其可执行权限。以下是完整的脚本内容: ```bash #!/usr/bin/expect -f # 设置超时时间(单位:秒) set timeout 30 # 获取参数 set host [lindex $argv 0] set username [lindex $argv 1] set password [lindex $argv 2] set source_file [lindex $argv 3] set destination_path [lindex $argv 4] # 启动 scp 进程 spawn scp -r $source_file ${username}@${host}:${destination_path} # 处理密钥认证提示 (首次连接可能需要确认主机指纹) expect { "(yes/no)?" { send "yes\n" exp_continue } "*assword:" { send "${password}\n" } } # 等待传输结束 expect eof ``` #### 3. 授权脚本为可执行 运行以下命令使脚本具有可执行权限: ```bash chmod +x scp_expect.sh ``` #### 4. 使用脚本进行文件传输 假设目标服务器 IP 地址为 `192.168.1.100`,用户名为 `user`,密码为 `mypassword`,要上传本地路径 `/path/to/local/file.txt` 到远程目录 `/home/user/remote/directory/`,则可以这样调用脚本: ```bash ./scp_expect.sh 192.168.1.100 user mypassword /path/to/local/file.txt /home/user/remote/directory/ ``` --- ### 关键点解析 - **Expect 工具的作用** `expect` 是一种用于自动化交互式程序的工具,能够模拟用户的键盘输入行为[^2]。在此场景下,它被用来捕获 `scp` 提示的密码输入请求,并自动填写密码。 - **递归复制选项 `-r`** 如果需要传输整个目录而非单个文件,则需加上 `-r` 参数以启用递归模式[^1]。 - **安全性注意事项** 将密码硬编码到脚本中存在安全隐患。建议使用更安全的身份验证方式,例如 SSH 密钥对认证[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值