一、OpenSSH简介
OpenSSH是安全Shell协议族(SSH)的一个免费版本。SSH协议族可以用来进行远程控件, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议), rcp(注2)都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程的中的数 据,并由此来代替原来的类似服务。
OpenSSH服务,sshd,是一个典型的独立守护进程(standalone daemon),但也可以根据需要通过网络守护进程(Internet Daemon)-inetd(注3)或Ineternet Daemon's more modern-xinted(注4)加载。OpenSSH服务可以通过/etc/ssh/sshd_config文件进行配置。
二、问题解决经过
本来在研究反病毒系统,用到了两台主机之间的文件传送技术,考虑到安全性,选择使用OpenSSH,
1、在ubuntu12.04下安装了OpenSSH:
sudo apt-get install openssh-server
2、启动服务:
sudo /etc/init.d/ssh start #(一般守护进程脚本文件都会在“/etc/init.d/”路径下)
然后查看服务是否已经启动:
ps -e|grep ssh #(ps -e:该命令是查询当前进程服务列表,并同时显示进程标识PID)
这个时候会看到下面两行:
2121 ? 00:00:00 ssh-agent <defunct>
6421 ? 00:00:00 sshd
但是,后面问题出现了,我可能是重复运行了启动服务的操作,在后来查看进程列表的时候发现sshd进程有两个,而且运行:
sudo service ssh stop
也没有能够结束守护进程,用ps查看时还是两个sshd,于是google一下,大家都在说用了上边这个stop命令之后就可以结束进程了,但是我这里就偏偏没有结束,于是各种搜索,各种尝试,中间还有几次出现了三个sshd进程,我那个郁闷啊。还有的说用下面这样操作可以解决:
sudo service ssh stop
sudo /etc/init.d/ssh restart
很可惜,运行结束命令之后重启,仍未能解决
后来还尝试了/etc/init.d/ssh stop还有kill <pid>等方法都未能凑效
。。。。。
一天过去了,我突然想到自己疏忽了一个重要细节当我用kill杀死进程的时候提示我“没有那个进程”,后来才知道(初学者,对kill命令使用方法不熟)使用kill时候还需要家sudo,于是:
用ps -e 查看当前进程,找到sshd进程的PID,然后:
sudo kill <PID>
成功杀死进程(两个sshd都被杀死):
这个时候查询当前有关ssh进程:
ps -e|grep ssh
发现sshd已经没有了。
如果需要再启动ssh服务,就使用命令:
sudo service ssh start
此时查询服务:
ps -e|grep ssh
出现:
yijiedao@ubuntu:~$ ps -e|grep ssh
2121 ? 00:00:00 ssh-agent <defunct>
6421 ? 00:00:00 sshd
正常运行,一切OK!
需要关闭服务时:
sudo service ssh stop
yijiedao@ubuntu:~$ sudo service ssh stop
ssh stop/waiting
yijiedao@ubuntu:~$ ps -e|grep ssh
2121 ? 00:00:00 ssh-agent <defunct>
这个时候远程主机就无法与本地主机建立连接了。
手动操作开启/关闭ssh服务相关命令:
sudo service ssh start #手动启动服务
sudo service ssh stop #手动关闭服务
sudo service ssh status #查询服务状态