安装openssh

##安装opensshphp

电脑中只有Ubuntu11.04,且系统中默认自带的只有ssh的客户端,而没有服务端。可是想体验下ssh登陆Linux功能,只好本身编译安装虚拟机里面的openssh。查看系统中是否有ssh服务端运行ps -e | grep sshcss

30 ?        00:00:00 sshd 373 ? 00:00:00 ssh-agent 

其中ssh-agent是ssh的客户端,而sshd才是后台服务,桌面版本系统通常都没有,须要自行安装linux

在Ubuntu中编译安装程序须要build-essential,经常使用的gcc编译工具系统已经自带,缺乏的只是autoconf和automake,编译autoconf须要m4,所以须要先安m4,直接到官网上下载最新的m四、autoconf和automake,使用tar -xzvf xxx.tar.gz解压后,进入目录,参考readme和Install两个文件编译,make install须要root权限,由于安装时通常须要安装到/usr/local/目录下,而普通用户没有写权限nginx

./configure 
make make test sudo make install 

安装完编译环境后,准备安装openssh,在它的说明文档中写了依赖3个库,autoconf、zlib和openssl,安装时须要注意版本的匹配,不必定用最新的版本。我在ubuntu上zlib使用的最新版本,openssl使用的1.0.2m版本,openssh下载的时7.6版本。shell

安装方法仍是同样的make一套,只是openssl用的时./config,它里面根据系统的差别再去调用./Configure。须要注意的地方:ubuntu

  • 不能在虚拟机vmware的共享目录下直接执行config编译openssl,须要拷贝到linux内部的目录中,不然在中间建立符号连接时会失败,make时提示No rule to make target../include/openssl/bio.h', needed by cryptlib.o'. Stop.MAKE
  • openssl编译时必须设置为动态库方式编译,不然openssh编译不了。./config --shared
  • 编译完成openssl后须要确认当前系统默认的openssl为本身刚刚编译的版本,若是系统以前自带了openssl,会致使openssh在configure时提示checking OpenSSL header version... not found错误。查看当前系统openssl版本openssl version -a。正常本身编译安装的程序若是在configure时不指定--prefix=dir安装目录的话,通常会安装在/usr/local/ssl,而系统默认的目录为/usr/bin/openssl以及/usr/include/openssl,所以须要建立符号连接,将刚编译的openssl做为默认,具体路径须要参考安装说明中的路径。
sudo mv /usr/bin/openssl /usr/bin/openssl.old
sudo ln -s /usr/local/ssl /usr/bin/openssl sudo ln -s /usr/local/include/openssl /usr/include/openssl # 动态库目录设置,这个命令执行时提示没有权限,失败 sudo echo "/usr/local/ssl/lib" >> /etc/ld.so.conf 

在ubuntu中/etc/ld.so.conf指明了系统当前动态库的查找目录其中只有一句话缓存

include /etc/ld.so.conf.d/*.conf 

本质上就是包含了ld.so.conf.d这个目录下的全部动态库配置,例如其中就有一个libc.conf指明了c库的默认位置为/usr/local/lib,同理能够在这个目录下新建一个openssl.conf的文件,在其中加一句话/usr/local/ssl/lib便可。在设置库目录后,须要执行一次sudo ldconfig来让系统更新一下库目录缓存/etc/ld.so.cache文件安全

至此,openssh的make已经没有问题,可是在install时会提示Privilege separation user sshd does not exist,这个和openssh的分权用户有关,bash

所谓特权分离(Privilege Separation)其实是一种 OpenSSH 的安全机制,该特性默认开启,可经过配置文件中的 UsePrivilegeSeparation 指令开启或关闭。ssh

须要执行如下操做后,再sudo make install

sudo mkdir -p  /var/empty #设置一个空目录 sudo chown 0:0 /var/empty #全部者和组,0表明"root" sudo chmod 000 /var/empty #目录权限设置为"000" sudo groupadd sshd #创建sshd组 sudo useradd -g sshd -c 'sshd privsep' -d /var/empty -s /bin/false sshd #用于特权分离的非特权用户"sshd" 
  • 启动openssh服务

编译安装的ssh不会建立/etc/init.d/sshd服务启动脚本,只有使用安装包安装的才有。所以要启动sshd服务,须要直接执行sudo /usr/local/sbin/sshd,注意此处不能直接执行sudo sshd,系统会提示要用绝对路径执行,网上有讲这个是由于sbin属于root用户,普通用户下是不能直接执行sbin下的命令。

  • 自动启动sshd

    1. /etc/rc.local中的exit 0以前添加/usr/local/sbin/sshd & ,让系统在初始化时执行

    2. 本身手动建立一个sshd的shell脚本文件放在/etc/init.d/目录下,并给文件增长执行权限chmod +x sshd,文件的内容为

      #!/bin/bash cd /usr/local/sbin ./sshd & 
    3. 而后到/etc/rc3.d/目录下创建一个连接到刚刚的sshd文件,标识系统在3级运行时就启动这个服务

      # cd /etc/rc3.d # ln -s ../init.d/sshd S13sshd 

  • /etc/rcN.d/简要说明

init.d 目录下放了系统安装程序时对应的服务启动或中止的脚本,可是系统不是直接从这个目录中直接执行脚本文件,而是根据当前系统的运行级别来决定指定哪些脚本。 init进程上来首先作的事是去读取/etc/目录下inittab文件中initdefault id值,这个值称为运行级别(run-level)。它决定了系统启动以后运行于什么级别。运行级别决定了系统启动的绝大部分行为和目的。这个级别从0到6 ,具备不一样的功能。不一样的运行级定义以下: 

  • 0 - 停机(千万别把initdefault设置为0,不然系统永远没法启动)
  • 1 - 单用户模式
  • 2 - 多用户,没有 NFS
  • 3 - 彻底多用户模式(标准的运行级)
  • 4 – 系统保留的
  • 5 - X11 (x window)
  • 6 - 从新启动 (千万不要把initdefault 设置为6,不然将一直在重启 )

/etc/rcN.d/中的数字N就表明了对应的运行级别要执行的脚本的目录,经过这些目录将不一样级别执行的服务区分。而全部的服务脚本本质都在init.d这个目录中,而rcN.d中则是软连接到了实际的脚本文件。例如级别3要启动的服务都放在rc3.d这个目录下。这个目录下文件名又以Sxx或Kxx开头,其中S表示启动一个服务,K标识中止一个服务,而xx标识执行的顺序,数字越小,越早执行,这样能够处理服务之间的相互依赖关系。

相关文章
相关标签/搜索