一、什么是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 root@192.168.1.119:/home/james
然后会提示你输入另外那台192.168.1.119主机的root用户的登录密码,接着就开始copy了。
如果想反过来操作,把文件从远程主机copy到当前系统,也很简单。
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的提示:james@192.168.1.119's password:
send就是将密码123456发送过去
expect eof 子进程已经结束的eof字符,expect脚本也就退出结束
interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台