scp 免交互

这篇博客介绍了如何在两台服务器间使用scp进行文件拷贝,以避免交互式输入密码。文中提到了两种方法:一是通过ssh设置免密登录,但需要前期配置;二是利用expect脚本实现真正的免交互式拷贝。文章通过案例展示了expect脚本在scp远程拷贝文件和非交互式修改用户密码的应用。

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

两台可访问服务器之间相互拷贝文件可以使用scp (具体命令这里就不介绍了)但是都是需要人工输入密码镜像人机交互的。在很多时候为了避免交互式操作,有两种办法:

1 ssh设置免密登录。

这种方式虽然可以免密登录和交互,但是不是绝对的免交互。在前期准备的时候还是需要人工参与创建公钥发送公钥到对方服务器等等。

2 用expect 脚本

前提:安装expect 安装包

案例1 scp 远程拷贝文件如下:

#!/usr/bin/expect -f
#
#
#
spawn scp -P 22 root@oracle-master:/usr/oracle/product/12c/db_1/dbs/orapworcl /opt/database/
expect {
"(yes/no)?"
{
send  "yes\n"
expect "password:"  { send  "root\n" }
}
# 上面是第一次登录会提示是否允许,send yes,
# 下面是非第一次提示,直接发送密码
"password:"
{
send "root\n"
}
}
expect eof

运行:/usr/bin/expect XXX.expect

案例2 非交互式修改用户密码:


### 配置 Linux SCP 免密传输文件 为了实现在 Linux 环境下的无密码 SCP 文件传输,主要依赖于 SSH 的公钥认证机制。以下是具体操作方法: #### 准备工作 确保源主机和目标主机都已安装 OpenSSH 客户端和服务端软件包。 #### 创建 SSH 密钥对 如果尚未创建过 SSH 密钥对,则可以在源主机执行如下命令来生成一对新的 RSA 类型私钥与公钥: ```bash ssh-keygen -t rsa ``` 此过程会提示指定保存位置,默认情况下为 `~/.ssh/id_rsa` 和 `~/.ssh/id_rsa.pub`;还会询问是否要设置 passphrase(即解锁私钥所需的额外保护短语),对于自动化场景建议留空以实现完全免交互[^1]。 #### 复制公钥至远程主机 有多种方式可以完成这一步骤: - **手动复制** 使用 SCP 命令将本地用户的 `.ssh/id_rsa.pub` 发送到远端机器上的相应路径,并追加到授权列表中去。 ```bash cat ~/.ssh/id_rsa.pub | ssh root@remote_host 'cat >> .ssh/authorized_keys' ``` - **利用工具辅助** 可借助 `ssh-copy-id` 工具简化流程,它能够自动处理上述逻辑。 ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub root@remote_host ``` 以上两种方案任选其一即可达成目的[^4]。 #### 测试连接有效性 尝试通过 SSH 登录对方服务器验证配置是否成功: ```bash ssh root@remote_host ``` 若无需输入密码便能顺利进入则说明一切正常[^2]。 #### 执行 SCP 无密码传输 此时再使用 SCP 进行数据交换就不会被要求提供凭证了。例如把本机某个文件发送给另一台设备: ```bash scp /path/to/local/file.txt root@remote_host:/destination/path/ ``` 同样地,在接收来自其他系统的资源时也适用相同原理[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值