第一种方法,用到了expect。
脚本如下:
#! /usr/bin/expect -f
spawn scp 1 koven@192.168.0.2:
expect "*password:"
send "your password\r"
expect eof
当然不只是scp,其它命令也可以用expect自动化
循环处理:
spawn scp 1 koven@192.168.0.2:
for { set i 1 } {$i<500} {incr i} {
expect {"*password:" {send "koven\r"}
"*(yes/no)*" {send "yes\r"}
}
}
注意大括号之间有空格 。
第二种方法,使用密钥文件。
这里假设主机A(192.168.100.3)用来获到主机B(192.168.100.4)的文件。
在主机A上执行如下命令来生成配对密钥:
ssh-keygen -t rsa
遇到提示回车默认即可,公钥被存到用户目录下.ssh目录,比如root存放在:
/root/.ssh/id_rsa.pub
将 .ssh 目录中的 id_rsa.pub 文件复制到 主机B 的 ~/.ssh/ 目录中,并改名为 authorized_keys,
到主机A中执行命令和主机B建立信任,例(假设主机B的IP为:192.168.100.4):
scp ~/.ssh/id_rsa.pub 192.168.100.4:/root/.ssh/authorized_keys
下面就可以用scp、ssh命令不需要密码来获取主机B的文件了
ssh 192.168.100.4 回车就不需要密码了。
注:其实id_rsa.pub内容添加到对方机器的authorized_keys中就行了。
-----------------------------------------------------------------------------------------------------
#!/usr/bin/expect -f
set password 密码
spawn scp 用户名@目标机器ip:拷贝文件的路径 存放本地文件的路径
set timeout 300
expect "用户名@目标机器ip's password:" #注意:这里的“用户名@目标机器ip” 跟上面的一致
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof
附:scp参数
-r:拷贝目录
-c:允许压缩
一个完整的例子
#!/usr/bin/expect -f
set password 123456
#download
spawn scp root@192.168.1.218:/root/a.wmv /home/yangyz/
set timeout 300
expect "root@192.168.1.218's password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof
#upload
spawn scp /home/yangyz/abc.sql root@192.168.1.218:/root/test.sql
set timeout 300
expect "root@192.168.1.218's password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof
########
PS:需要先安装expect
相关推荐
标题所述的"通过秘钥实现scp不输入密码传送文件"是一种使用SSH密钥对进行身份验证的方法,以避免在执行SCP(Secure Copy)命令时反复输入密码。SCP是基于SSH协议的安全文件传输工具,通常用于在不同的主机之间复制...
总结来说,通过使用`sshpass`或密钥对认证,可以在bash脚本中自动化处理SSH和SCP命令,而无需人工干预输入密码。这种方式极大地提高了自动化任务的安全性和效率。但是,强烈建议使用密钥对,因为它提供了更好的安全...
Python执行SCP命令是一种在编程中实现自动化文件传输到远程服务器的常见方法,特别是在需要脚本化或批量处理任务时。SCP(Secure Copy)是基于SSH协议的安全文件传输工具,它允许用户通过加密连接将文件从本地复制到...
本想直接在bash文件中使用Pexpect 来实现自动输入密码,并scp拷贝文件,但是权限的限制导致不能安装使用Pexpect 。 最后考虑使用python实现。 环境: python2.7 centos from pexpect import * import os cwd = os....
Shell脚本实现自动输入密码登录服务器是自动化运维和部署中的常见需求,特别是在执行涉及权限验证的任务时,如scp文件传输或SSH远程连接。在这种情况下,使用expect工具可以帮助我们编写脚本,自动处理需要用户交互...
在日常运维工作中,经常需要在多台远程Linux主机之间传输文件,这时,手动执行scp命令会显得效率低下且容易出错。为了解决这个问题,就有了“Linux批量scp命令执行工具”,它能够帮助管理员批量地对多个Linux主机...
4. **权限与身份验证**:由于scp命令基于SSH,因此需要确保在所有目标主机上都有正确的公钥认证设置,以避免每次传输时输入密码。 5. **错误处理**:在脚本中添加错误处理机制,如捕获scp命令的退出状态码,以便在...
但我到现在还在对python的恐惧之中(虽然已经在空闲时间努力去学习了),所以使用了shell和expect脚本结合的方式,写了这个批量scp的脚本工具。 expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh...
`expect`可以理解为一个自动化工具,它允许我们在脚本中控制与进程的交互,比如自动输入密码、确认操作等。下面是一个简单的`expect`脚本示例,用于无密码登录并执行`SCP`命令: ```bash #!/usr/bin/expect spawn ...
在执行脚本时,确保已经正确配置了SSH密钥对以实现无密码登录,这样可以避免在自动化过程中频繁输入密码。 ```bash #!/bin/bash # 定义源文件和目标服务器列表 SOURCE_FILE="/path/to/source/file" SERVERS=(...
出于安全考虑,SSH在连接远程主机时会要求输入密码,但在脚本自动化场景中,这种交互式输入密码的方式是不可接受的。为了解决这一问题,这篇博文介绍了如何使用expect工具实现shell脚本中的SSH无交互自动登录。 ...
通常,SSH连接需要用户输入密码进行身份验证,但频繁输入密码会降低效率,特别是在自动化脚本中。为了解决这个问题,SSH提供了一种基于密钥对的身份验证方式,使得在不同主机之间进行无密码登录成为可能。以下将详细...
示例:A为本地主机(即用于控制其他主机的机器) ;... chmod 0700 .ssh” (需要输入密码)# scp ~/.ssh/id_rsa.pub root@192.168.60.110:.ssh/id_rsa.pub (需要输入密码) 在B上的命令:# touch /root/.ssh/au
不绕圈子,揭晓答案:设置终端状态为“字符不回显”(如果你了解过termios的话,也一定听说过) 方法就是... 您可能感兴趣的文章:解决ssh远程登陆linux显示-bash-4.1$的问题bash脚本中将密码传递给ssh/scp命令方法详解
为了减少因服务器用户密码定期更改带来的不便以及避免在自动化脚本中输入密码,可以通过设置SSH密钥对实现无密码传输文件。 ##### 准备工作 1. **确认远程服务器22端口开放**:使用`netstat -ntlp | grep ssh`检查...
该协议使用伪随机卡挑战的安全通道模式,允许在卡不存在的情况下离线准备个人化脚本,并在没有与准备脚本的实体在线连接的情况下在卡上处理这些脚本。 2. 密钥管理 本文档引入了密钥管理的概念,强调了密钥的安全...