shell中使用ssh
ssh服务是不能用非交互的方式传递密码,想不输入密码,直接ssh连接到服务器有两种方法,sshpass和expect
sshpass
# wget http://downloads.sourceforge.net/project/sshpass/sshpass/1.04/sshpass-1.04.tar.gz?use_mirror=cdnetworks-kr-1
# tar zxvf sshpass-1.04.tar.gz
# cd sshpass-1.04
# ./configure
# make && make install
sshpass为C编写的一个小程序使用比较简单,用法如下
sshpass -p 密码 ssh 用户名@目标IP 要执行的命令
此处密码为明文。sshpass也可以使用密码文件。具体可以通过‘sshpass -h’看看帮助。
对于密码安全问题,如使用密码文件可以将文件权限修改为600。如果直接写在shell中,可以使用加密脚本的
工具,缺点是每次修改都要编译脚本。
expect
1.首先确认expect的包要安置。
[root@localhost]$ rpm -qa | grep expect
如果没有则需要下载安装,yum -y install expect expect-devel
安装过后会显示:
[root@localhost] rpm -qa | grep expect
expect-5.43.0-5.1
expect-devel-5.42.1-1
2.查看expect的路径,可以用
[root@localhost] which expect
/usr/bin/expect
3.确定脚本有可执行权限
chmod +x test.sh
#!/usr/bin/expect //这个expect的路径就是用which expect 查看的结果
spawn ssh -l 远程主机的用户名 远程主机的ip地址
expect "password:" //提示让输入密码
send "远程主机的密码\r"
interact //操作完成
!
另外需要注意的是:
不能按照习惯来用sh test.sh来这行expect的程序,会提示找不到命令,如下:
test.sh: line 2: spawn: command not found
couldn't read file "password": no such file or directory
test.sh: line 4: send: command not found
test.sh: line 5: interact: command not found
因为expect用的不是bash所以会报错。执行的时候直接./test.sh就可以了
http://blog.csdn.net/zhuying_linux/article/details/6657020
shell中使用ssh的更多相关文章
- 全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)
注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作 ...
- 如何在ubuntu中启用SSH服务
如何在ubuntu14.04 中启用SSH服务 开篇科普: SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为 ...
- docker中安装ssh服务
系统:Debian Docker 目标:在docker(debian系统)中安装ssh服务,实现远程登陆和控制docker 步骤: 初始状态:通过docker pull debian得到的一个debi ...
- ubuntu中启用ssh服务
ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的.而如 ...
- Ubuntu中启用ssh服务---转载
ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序Ubuntu是默认安装的.而如 ...
- 在Shell中使用alias
以前在Linux跳机上登录其他服务器(ssh IP),为了方便,把很多服务器的IP和业务名称touch到了用户主目录下,这样方便了好多,每次ls -l 出来下就可以了,然后复制,粘贴就方便了.如下图. ...
- shell中的环境变量:local,global,export
1.local一般用于局部变量声明,多在在函数内部使用.实例如下: echo_start() { local STR="$1" echo "...... ${ ...
- shell 中的expect 用法
expect一般用于实现用脚本来自动远程登录,对远程机器执行相关操作 测试机上的expect目录一般在/usr/bin/expect路径 下面是从网上查询的用法总结: 1. expect中的判断语句: ...
- [转]Linux shell中的那些小把戏
我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧.是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开始在我的Dropbox账号里用文本 ...
随机推荐
- 使用Rest api管理Ceph网关
背景 开发基于Ceph RadosGW的微服务,需要实现调用方可以通过rest api就能创建用户,获取用户信息等功能. 实现 Ceph的RadosGW自身就有该功能,这些创建用户.获取用户信息.获取 ...
- Oauth2的遇坑一点提示(Spring Security Oauth2 / Cloud)
1)使用@EnableOAuth2Sso的网页客户端,登录是成功的可是总是像没成功一样. 提示错误:没有 症结:context-path没设置,或者设置为/(ROOT) 参考资料:https://sp ...
- python读文件和写文件
f=open('D:\\wangdongjie\\files\\webservice\\baidu\\3.txt','r+') f.write('中国电视台1][][23qwe12f我是一个小小的石头 ...
- python学习笔记——Thread常用方法
Thread对象中的一些方法: 以前说过多线程,用到threading模块中的Thread对象,其中的start和run方法比较熟悉了,start()是重载了Thread对象中的run方法,其实作用还 ...
- jsoup解析xml某片段的问题
参考: http://blog.csdn.net/qy20115549/article/details/53556928 <tr> <td class='center'> &l ...
- mysql 快捷键
1.ctrl+q 打开查询窗口2.ctrl+/ 注释sql语句3.ctrl+shift +/ 解除注释4.ctrl+r 运行查询窗口的s ...
- [工作笔记]JDK版本不同导致的SSL异常
前言 遇到这个问题得说一下笔者的开发环境,笔者所在公司,平时开发用的web容器是jboss,使用的JDK是oracle的JDK,但是测试和生产环境用的是WAS,JDK用的是IBM的JDK,由于项目的不 ...
- TypeScript完全解读(26课时)_11.TypeScript完全解读-类型推论和兼容性
11.TypeScript完全解读-类型推论和兼容性 在一些时候省略指令,ts会帮我们推断出省略的类型的地方适合的类型,通过学习ts的类型推论了解ts的推论规则 类型兼容性就是为了适应js灵活的特点, ...
- JAVA企业级开发--jsp,el,jstl(14)
三. EL表达式语言 EL 全名为Expression Language.表达式语言.jsp2.0之后才引入的. EL主要作用:替代:<%= %> out.print(); 获取数 ...
- Two sum(给定一个无重复数组和目标值,查找数组中和为目标值的两个数,并输出其下标)
示例: nums = [1,2,5,7] target = [6] return [0,2] Python解决方案1: def twoSum(nums, target): ""&q ...