SSH远程控制

什么是SSH
简而言之,ssh为linux提供了远程shell机制。以A、B两台机器为例,ssh可以A机器可以通过ssh 调动B机器中的shell程序处理事务。ssh除了提供远程shell调用之外,还提供了ftp功能,用于主机间的文件传递。

实际上,telnet与ftp也具备与ssh相似的功能,但telnet和ftp在主机互联过程中,所传递的数据是不加密的,很容易被第三方窃取。ssh可对主机间所传送的数据进行加密,具有较高的安全性。因此,不推荐使用telnet与ftp。

启动SSH服务
ssh是由客户端与服务器端组成。在使用ssh服务前,首先确认你的Linux系统中是否已经安装ssh(各发行版都有其相应的软件包管理工具可以使用),并使用以下命令查看服务器端(就是你想远程登录的那台机器)是否已经启动:

# > netstat -tl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
……   
tcp        0      0 *:ssh                   *:*                     LISTEN      
……

netstat是网络查询命令,其参数“-t”是显示tcp数据包的连接行为,参数“-l”是显示监听状态。如果"netstat -tl"输出结果如上面代码所示,则说明服务器端ssh服务已启动。

如果ssh服务未启动,需要手动启动,方法:在/etc/init.d目录下,寻找“ssh”或“sshd”文件,如果找到,执行以下命令:

# cd /etc/init.d
# ./ssh start

有些Linux发行版的“init.d”目录不一定在“/etc”下,视具体版本而定了。

如果想开机时就自动启动ssh服务,在gentoo下可以:
# rc-update add /etc/init.d/ssh default

其它Linux发行版,也有其自己的设定方法,如不清楚,可根据具体发行版本,google而定。

ssh 一般连接
比如我所在的机器IP是“192.168.0.22”,我想ssh到IP为“192.168.0.2”机器,并以该机器上的用户“m2”进行一些操作,实现步骤如下:

$ ssh m2@192.168.0.2

The authenticity of host '192.168.0.2 (192.168.0.2)' can't be established.
RSA key fingerprint is
83:a0:ed:c8:db:18:b4:23:28:9b:e8:0d:e3:fd:96:91.

Are you sure you want to continue connecting (yes/no)? yes
              <==在此请输入“yes”!

Warning: Permanently added '192.168.0.88' (RSA) to the list of known hosts.

m2@192.168.0.2's password:
              <==请输入用户m2在机器192.168.0.2上的密码后,就进入了该机器

[m2@ ~]$

进入m2@192.168.0.2后,就可以调用该机器的shell功能了。要是想退出中断ssh的连接,键入“exit”即可。使用sftp登录远程主机的步骤与ssh类似。

ssh 高级连接
按照ssh一般连接的操作步骤,每次登录远程主机都要重复输入主机端用户密码,过于繁琐。可以利用ssh提供的身份验证机制避免重复输入主机端用户密码操作。这里捎带着讲一下远程连接加密的机理。

ssh服务器端启动后,会产生一个公钥(实际上就是一组数)。当ssh客户端向ssh服务器端发送连接请求时,通常ssh服务器端会反馈给ssh客户端一个私钥。在建立起通信连接后,数据发送方可以根据自己所掌握的密钥对所传送的数据进行加密,接受数据的一方可以使用自己所掌握的密钥对数据进行解密。数据的加密与解密,实际上就是公钥与私钥的匹配。

ssh提供的主机与客户端之间的身份验证机制也是利用了ssh服务器端的公钥与ssh客户端的私钥进行匹配实现的,具体实现步骤如下:

#在客户端生成公钥(Public Key)与私钥(Private Key),下面这行命令中的rsa选项参数表示采用rsa加密算法来生成密钥

$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/silent/.ssh/id_rsa): <==这里直接回车

Enter passphrase (empty for no passphrase): <==这里直接回车

Enter same passphrase agin: <==这里直接回车

Your identification has been saved in /home/silent/.ssh/id_rsa  <==这是私钥

Your public key has been saved in /home/silent/.ssh/id_rsa.pub  <==这是公钥

将私钥保留在默认生成目录下,使用sftp,将公钥复制到ssh服务器相应用户的主目录下,比如IP为“192.168.0.2”机器上的m2用户“/home/m2”目录:

$ sftp m2@192.168.0.2

输入密码:
sftp > put /home/silent/.ssh/id_rsa_pubsftp > exit

然后,使用ssh一般连接到ssh服务器端,执行以下操作,:

$ cd /home/m2/.ssh
$ cat ../id_rsa_pub >> authorized_keys

进行完以上各步之后,在ssh客户端机器上就可以无需输入密码,直接登录m2@192.168.0.2:

$ ssh m2@192.168.0.2