1. 程式人生 > >Linux 從原始碼編譯安裝 OpenSSH以及各問題解決

Linux 從原始碼編譯安裝 OpenSSH以及各問題解決

簡單的說 OpenSSH 是一組安全遠端的連線工具,主要包括了幾個部份:ssh、sshd、scp、sftp、ssh-keygen、ssh-agent、ssh-add。OpenSSH 安裝配置比較複雜,難點在配置,特別是在 VPS 中,配置不當就完全無法連結 VPS 了。

一、關於 OpenSSH

OpenSSH 是一組用於安全地訪問遠端計算機的連線工具。它可以作為 rlogin、 rsh rcp 以及 telnet 的直接替代品使用。更進一步, 其他任何 TCP/IP 連線都可以通過 SSH 安全地進行隧道/轉發。 OpenSSH 對所有的傳輸進行加密, 從而有效地阻止了竊聽、 連線劫持,以及其他網路級的攻擊。

ssh(SSH 客戶端,用於登入建立連線,是 rlogin 與 Telnet的安全替代方案)
sshd (SSH 服務端,典型的獨立守護程序)
scp、sftp (檔案安全傳輸工具,rcp、ftp 安全的替代方案)
ssh-keygen (用於產生 RSA 或 DSA 金鑰)
ssh-agent、ssh-add(幫助使用者不需要每次都要輸入金鑰密碼的工具)

二、編譯前的準備工作

2.1、檢視 OpenSSH 版本

部分 Linux 系統已預設安裝了 OpenSSH,像 Ubuntu Server 10.10 就已安裝了 OpenSSH_5.5p1

1
ssh -v

2.2、安裝 OpenSSL 及編譯環境

必須先安裝依賴 OpenSSL,具體見Linux 從原始碼編譯安裝 OpenSSL》 http://www.linuxidc.com/Linux/2011-10/45738.htm

2.3、備份 OpenSSH 舊配置檔案

1
2
3
cp /etc/init.d/ssh /etc/init.d/ssh.old
cp -r /etc/ssh /etc/ssh.old
cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys.old

2.4、解除安裝舊版 OpenSSH

1
apt-get purge openssh-client openssh-server

三、編譯安裝 OpenSSH

3.1、關於特權分離

所謂特權分離(Privilege Separation)實際上是一種 OpenSSH 的安全機制,該特性預設開啟,可通過配置檔案中的 UsePrivilegeSeparation 指令開啟或關閉。

1
2
3
4
5
mkdir -p  /var/empty #設定一個空目錄
chown 0:0 /var/empty #所有者和組,0代表"root"
chmod 000 /var/empty #目錄許可權設定為"000"
groupadd sshd #建立sshd組
useradd -g sshd -c 'sshd privsep' -d /var/empty -s /bin/false sshd #用於特權分離的非特權使用者"sshd"

3.2、編譯安裝 OpenSSH

詳細編譯選項見《OpenSSH-4.7p1 安裝指南》

1
2
3
4
5
wget http://ftp.aso.ee/pub/OpenBSD/OpenSSH/portable/openssh-5.6p1.tar.gz
tar -zxf openssh-5.6p1.tar.gz
cd openssh-5.6p1/
./configure --prefix=/usr/local --sysconfdir=/usr/local/ssh --with-ssl-dir=/usr/local/ssl --with-privsep-path=/var/empty --with-privsep-user=sshd  --with-zlib=/usr/local/lib --with-ssl-engine --with-md5-passwords --disable-etc-default-login
make && make install

--prefix 安裝目錄
--sysconfdir 配置檔案目錄
--with-ssl-dir 指定 OpenSSL 的安裝目錄
--with-privsep-path 非特權使用者的chroot目錄
--with-privsep-user=sshd 指定非特權使用者為sshd
--with-zlib 指定zlib庫的安裝目錄
--with-md5-passwords 支援讀取經過MD5加密的口令
--with-ssl-engine 啟用OpenSSL的ENGINE支援

3.3、開機自啟動 sshd

1
2
3
mv /etc/init.d/ssh.old /etc/init.d/sshd #使用原來的啟動指令碼
vim /etc/init.d/sshd #編輯,然後替換路徑。
update-rc.d mysql defaults
1
2
3
4
#將原路徑"/usr/sbin替換為"/usr/local/sibn"
:%s/usr\/sbin/usr\/local\/sbin/g
#將原路徑"/etc/ssh替換為"/usr/local/ssh"
:%s/etc\/ssh/usr\/local\/ssh/g

四、 OpenSSH 安全配置

4.1、檢視 OpenSSH 配置檔案

1
cd /usr/local/ssh

moduli #ssh伺服器的Diffie-Hellman金鑰檔案
ssh_config #ssh客戶端配置檔案
sshd_config #ssh伺服器配置檔案
ssh_host_dsa_key #ssh伺服器dsa演算法私鑰
ssh_host_dsa_key.pub #ssh伺服器dsa演算法公鑰
ssh_host_rsa_key #ssh伺服器rsa演算法私鑰
ssh_host_rsa_key.pub #ssh伺服器rsa演算法公鑰

4.2、生成伺服器金鑰對

預設 OpenSSH 安裝完畢後就自動生成了,如果丟失可通過下面命令重新生成。

1
2
3
4
5
6
ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N '' #適用於ssh-1版
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
 
chmod 600 /etc/ssh/ssh_host_*
chmod 644 /etc/ssh/ssh_host_*.pub

特別注意:

1、系統金鑰對是不能設定密碼的, -N 後面 是兩個 單引號 !表示密碼串為空。
2、注意公鑰和私鑰的許可權是不同的。

使用最新openssl 1.0.1h 編譯安裝 openssh 6.6p1  


openssh從6.5版本開始,使用openssl 原始碼編譯的時候,必須使用動態庫(在openssh 6.4之前的版本中沒這種情況);一直沒找到具體的說明,但是經過無數次編譯嘗試,終於驗證這種事實。 安裝openssl時候加上,使用--shared 引數建立共享庫檔案,否則在編譯openssh過程中會報錯;報錯型別根據不同的安裝習慣,可能有多種 1.) configure: error: *** Can't find recent OpenSSL libcrypto (see config.log for details) *** 2.) OpenSSL version mismatch.  3.) checking OpenSSL header version... not found 具體安裝過程如下: 1. 下載最新軟體包原始碼 http://ftp5.usa.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.6p1.tar.gzhttp://www.openssl.org/source/openssl-1.0.1h.tar.gzhttp://www.openssl.org/source/openssl-fips-2.0.5.tar.gz 2. 使用YUM安裝必要的軟體開發包

# yum install -y zlib-devel pam-devel tcp_wrappers-devel

3. 安裝openssl-fips,此為FIPS 140-2 support module for openssl, 具體說明參見http://www.openssl.org/docs/fips  # tar zxpf openssl-fips-2.0.5.tar.gz# cd openssl-fips# ./config# make && make install 4. 安裝OpenSSL # tar zxpf openssl-1.0.1h.tar.gz# cd openssl-1.0.1h# ./config fips --shared # make && make install  5. 將新編譯的openssl library 加入系統動態庫連結中
# echo "/usr/local/ssl/lib" >> /etc/ld.so.conf# ldconfig update :如果在第4步openssl 編譯過程中,將其設定為OS預設安裝目錄(--prefix=/usr),那麼此步驟無需執行!


6. 安裝OpenSSH # tar zxpf openssh-6.6p1.tar.gz# cd openssh-6.6p1# ./configure --prefix=/usr/local/ssh --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/# make && make install
!!! 另一種處理方案是, 在編譯openssh的時候,使用--without-hardening引數。 此動作,將改變openssh編譯時候gcc引數,關閉 fPIE。個人認為此方案僅是種解決問題的方法,不是最優。 期待openssh 官方提供根本解決方案。 具體到上述安裝步驟的改變為: 步驟4,去掉--shared 引數,等同於使用預設值 # ./config fips # make && make install  步驟5,取消 步驟6,更新如下 # ./configure \  --prefix=/usr \  --sysconfdir=/etc/ssh \  --with-md5-passwords \  --with-pam \  --with-tcp-wrappers \  --with-ssl-dir=/usr/local/ssl \  --without-hardening# make && make install 
對最近OpenSSL的頻繁爆漏洞,比較無奈。。。

checking OpenSSL header version... not found configure: error: OpenSSL version header not found.問題

系統沒有找到openssl庫,需要執行ldconfig。

相關推薦

Linux 原始碼編譯安裝 OpenSSH以及問題解決

簡單的說 OpenSSH 是一組安全遠端的連線工具,主要包括了幾個部份:ssh、sshd、scp、sftp、ssh-keygen、ssh-agent、ssh-add。OpenSSH 安裝配置比較複雜,難點在配置,特別是在 VPS 中,配置不當就完全無法連結 VPS 了。

Linux 原始碼編譯安裝 OpenSSH

https://blog.csdn.net/bytxl/article/details/46639073   Linux 從原始碼編譯安裝 OpenSSH以及各問題解決 2015年06月25日 17:37:49 by

Linux原始碼編譯安裝程式詳解

1.原始碼編譯概述 1.1 使用原始碼安裝軟體的優點: 獲得最新的軟體版本,及時修復bug 根據使用者需要,靈活定製軟體功能 1.2 應用場合舉例 安裝較新版本的應用程式時 當前安裝的程式無法滿足需要時  需要為應用程式新增新的功能時

linux source編譯安裝Python

我使用的是 CentOS7.3 安裝 Python3.6.2 1.檢視是否已經安裝Python Centos7 預設安裝了Python2.7.5 因為一些命令要用它比如 yum 它使用的是 python2.7.5. 使用 python -V 命令檢視一下是否安裝 Python: #

Linux原始碼編譯安裝mariadb資料庫

環境:centos7 準備:mariadb-10.2.18.tar 資料庫安裝包 [[email protected] ~]# rz Transferring mariadb-10.2.18.tar.gz... 第一步: 建立mysql使用者 [[email 

Linux原始碼編譯安裝Redis和部署

    redis是一個 鍵值 (Key—Value)型別 記憶體資料庫 ,所有的操作都是在記憶體中進行。然後定期地通過非同步操作將資料庫的資料flush到硬碟上。由於是記憶體操作,所以效能非常的出色。但是容易受實體記憶體的影響,如果是海量

Linux原始碼編譯安裝Mysql

 下面是在redhat 5.8下原始碼編譯安裝mysql5.6.12  1. 首先檢視系統有沒有安裝Mysql  # rpm -qa |grep mysql    如果系統上有Mysql,先解除安裝  # yum remove mysql 或者 # rpm -e my

Python3.7.1原始碼編譯安裝

#!/bin/bash #確保shell 切換到當前shell 指令碼資料夾 current_file_path= ( c

linux通過原始碼編譯安裝redis詳細步驟

1.下載原始碼包 [[email protected] opt]# wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2.解壓縮redis [[email protected] opt]# tar

Linux原始碼編譯安裝詳解

前言 原始碼要執行,必須先轉成二進位制的機器碼。這是編譯器的任務。 比如,下面這段原始碼(假定檔名叫做test.c)。 #include <stdio.h> int main(void) {   fputs("Hello, world!\n", stdout

【指導】原始碼編譯安裝Git-Ubuntu

1 下載原始碼包 2 編譯安裝Git 1)安裝編譯原始碼包的工具: $sudo apt-get installlibcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev 2)展開原始碼包,進入: $t

Linux原始碼編譯安裝Python3

作業系統:Centos 下載原始碼包 下載地址 https://www.python.org/downloads/release/python-365/ 解壓 # tar -zxvf Python-3.6.5.tgz 安裝需要的依賴 # yum -y instal

zmap原始碼編譯安裝流程及錯誤解決方案

參考官方給出的方案在這裡,事實上針對ubuntu我們要進行一些調整。 注意:以下命令均進行在root許可權下 我的安裝環境:ubuntu12.04+zmap2.1.0 安裝依賴包 apt-

linux下【centos】nginx自動原始碼編譯安裝指令碼,以及通過service 啟動/停止/過載 nginx的服務指令碼

 第一:指令碼為nginx原始碼編譯安裝的指令碼,可以幫助使用者自動建立系統使用者“nginx”;可以使用者自己指定安裝路徑,配置檔案路徑,執行檔案路徑等; 第二:可以配置第二個指令碼使用,通過service服務來管理nginx。 [[email protect

Linux之Nginx原始碼編譯安裝,並實現Nginx版本升級,秒級切換和Nginx版本回滾,秒級回退

Linux之Nginx原始碼編譯安裝,並實現Nginx版本升級,秒級切換和Nginx版本回滾,秒級回退 1、先檢查Nginx依賴庫(主要4個gcc、pcre、zlib、openssl,通過yum安裝) 2、GCC——GNU編譯器集合(GCC可以使用預設包管理器的倉庫(reposito

CentOS 原始碼編譯安裝 Nginx

Linux 系統要求 Nginx 在 Linux 作業系統下執行的時候,要想獲取高併發能力,要求 Linux 核心必須在 2.6 以上,可通過以下命令檢視 Linux 核心版本。 $ uname -r 2.6.18-128.e15 安裝 Nginx 的必備軟體 通過以下命令安裝使用

Linux上進行原始碼編譯安裝程式詳解

文章轉載自:http://xuweitao.blog.51cto.com/11761672/1905357 1. 編譯安裝概述 前面兩篇關於程式包管理器的文章談到,無論是使用rpm命令還是yum命令安裝的都是已編譯好的程式包,在整個安裝過程中使用者只需執行一條命令即可完成安裝。這樣帶

Linux 原始碼編譯安裝mysql

MySQL 安裝與使用 MySQL Installer 5.7.24 1、 MySQl安裝 1.1 下載MySQL MySQL 官網:https://dev.mysql.com/downloads/mysql/ 下載連線:https://cdn.mysql.com//Downloads/M

編譯linux核心原始碼安裝、刪除核心

Linux核心編譯、安裝流程 本部落格屬於原創,轉載請註明來源 此處只講linux核心編譯步驟至於安裝虛擬機器,安裝ubuntu作業系統請自行百度 環境資訊: Linux作業系統:ubuntu16.04 核心版本:4.15.0-29-generic 需要編譯和安裝的核心原始碼

Linux原始碼編譯安裝詳解

1. 編譯原始碼步驟 configure、Makefile.in一般是專案管理器自動生成的,這依賴於兩個開發工具: autoconf:生成configure指令碼檔案; autoconf需要結合一個配置檔案來和其它命令生成configure指令碼;這個配置檔案告訴autoco