ssh、scp的使用,以及shell脚本解决scp需要输入密码的问题

一、什么是SSH?

简单说,SSH是一种网络协议,用于计算机之间的加密登录。

如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。

 

二、最基本的用法

SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。

$ ssh user@host
  
eg:
ssh james@192.168.1.119

如果本地用户名与远程用户名一致,登录时可以省略用户名。

ssh 192.168.1.119

SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。

三、SCP使用

scp是有Security的文件copy,基于ssh登录。

操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。

scp /home/james/data.txt [email protected]:/home/james

然后会提示你输入另外那台192.168.1.119主机的root用户的登录密码,接着就开始copy了。

如果想反过来操作,把文件从远程主机copy到当前系统,也很简单。

scp james @192.168.1.119:/home/james/data.txt home/james/data.txt
 
四、shell脚本解决scp需要输入密码问题
expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包
sudo apt-get install expect

安装完成之后,书写脚本scp.sh

#!/usr/bin/expect -f
set timeout 30
spawn scp TcrController james@192.168.1.119:/home/james/ws
expect "*password:"
send "123456\r"
expect eof

注意:expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect

在运行脚本时候要expect  file,不能sh file了

首行指定用来执行该脚本的命令程序,这里是/usr/bin/expect

上面语句第一句是设定超时时间为30s,spawn是expect的语句,执行命令前都要加这句

expect "password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:[email protected]'s password:

send就是将密码123456发送过去

expect eof 子进程已经结束的eof字符,expect脚本也就退出结束

interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台 

猜你喜欢

转载自blog.csdn.net/keith003/article/details/80604721