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