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的更多相关文章

  1. 全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)

    注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作 ...

  2. 如何在ubuntu中启用SSH服务

    如何在ubuntu14.04 中启用SSH服务 开篇科普:  SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为 ...

  3. docker中安装ssh服务

    系统:Debian Docker 目标:在docker(debian系统)中安装ssh服务,实现远程登陆和控制docker 步骤: 初始状态:通过docker pull debian得到的一个debi ...

  4. ubuntu中启用ssh服务

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的.而如 ...

  5. Ubuntu中启用ssh服务---转载

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序Ubuntu是默认安装的.而如 ...

  6. 在Shell中使用alias

    以前在Linux跳机上登录其他服务器(ssh IP),为了方便,把很多服务器的IP和业务名称touch到了用户主目录下,这样方便了好多,每次ls -l 出来下就可以了,然后复制,粘贴就方便了.如下图. ...

  7. shell中的环境变量:local,global,export

     1.local一般用于局部变量声明,多在在函数内部使用.实例如下:      echo_start() { local STR="$1" echo "...... ${ ...

  8. shell 中的expect 用法

    expect一般用于实现用脚本来自动远程登录,对远程机器执行相关操作 测试机上的expect目录一般在/usr/bin/expect路径 下面是从网上查询的用法总结: 1. expect中的判断语句: ...

  9. [转]Linux shell中的那些小把戏

    我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧.是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开始在我的Dropbox账号里用文本 ...

随机推荐

  1. Android四种启动模式

    四种启动模式 standard(默认) singleTop singleTast singleInstance standard(默认) 系统默认的启动模式. Android是使用返回栈来管理活动的, ...

  2. 卸载TwinCat3之后vs未能正确加载包错误解决

    如上图所示错误. 使用vs开发人员命令提示,输入以下代码.会清除所有用户设置,然后就没有错误提示了. devenv /resetuserdata

  3. CF-798C

    C. Mike and gcd problem time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  4. 1.SJ-SLAM-14

    1.引言 SLAM:Simultaneous Localization and Mapping 同时定位与地图构建 搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估 ...

  5. 【转】Visual Studio 选择相同变量高亮

    转:http://www.cnblogs.com/stone_w/p/3613760.html 前段时间一直在使用matlab,今天需要使用vs2008,而用惯了matlab,习惯了其中一项选中变量高 ...

  6. HTML学习笔记(五)框架

    框架 通过使用框架,可以在同一个浏览器窗口中显示多个页面. eg: <frameset rows="50%,50%"> <frame src="/exa ...

  7. 如何实现Vue已经弃用的$dispatch和$broadcast方法?

    对于父子(含跨级)传递数据的通信方式,Vue.js 并没有提供原生的 API 来支持,而是推荐使用大型数据状态管理工具 Vuex,但 Vuex 对于小型项目来说用起来真的很麻烦. 在 Vue.js 1 ...

  8. P5137 polynomial(分治)

    传送门 神仙--这题有毒-- 一直在那里考虑没有逆元怎么办然后考虑解exgcd巴拉巴拉 最后只好看题解了 而且这题龟速乘都不行--得用代码里那种叫人半懂不懂的方式取模-- //minamoto #in ...

  9. Java 时区(转)

    http://blog.csdn.net/wangpeng047/article/details/8560690

  10. 后端开发福音!GitHub上15W+的后台控制面板!

    Web 开发中几乎的平台都需要一个后台管理,但是从零开发一套后台控制面板并不容易,幸运的是有很多开源免费的后台控制面板可以给开发者使用,那么有哪些优秀的开源免费的控制面板呢?我在 Github 上收集 ...