1. 程式人生 > >sshd服務基本配置和使用(201610改)

sshd服務基本配置和使用(201610改)

主目錄 兩個文件 pos home ref 保存 如果 鏈接 運行環境

一、基於密鑰認證的服務端基本安全設置:
1、修改/etc/ssh/sshd_config,具體如下:
Protocol 2 #只支持SSH2協議
Port <端口號> #修改默認端口號
MaxStartups 5 #同時允許5個尚未登錄的SSH聯機
MaxAuthTries 3   #最大登錄嘗試次數為3

GSSAPIAuthentication no  #關閉GSSAPI認證
ServerKeyBits 1024  #將ServerKey強度改為1024比特
PermitEmptyPasswords no  #禁止空密碼進行登錄
ChallengeResponseAuthentication no #禁用s/key密碼

UsePAM no #不通過PAM驗證
PermitRootLogin no #禁止root遠程登錄
PasswordAuthentication no  #不允許密碼方式的登錄
RSAAuthentication no #不允許RSA認證,只針對SSH1
PubkeyAuthentication yes #允許公鑰認證
AuthorizedKeysFile .ssh/authorized_keys #保存公鑰的認證文件
UsePrivilegeSeparation yes #用戶權限設置

SyslogFacility AUTH #記錄SSH登錄情況
LogLevel INFO #記錄等級為INFO

PrintMotd yes #登錄成功後顯示/etc/motd 文件的內容
PrintLastLog no #不顯示上次登錄信息
Compression yes #是否壓縮命令
KeepAlive yes #防止死連接
StrictModes yes #接受連接請求前對用戶主目錄和相關的配置文件進行宿主和權限檢查
UseDNS no #不使用DNS反解

AllowUsers <用戶名> #允許通過遠程訪問的用戶,多個用戶以空格分隔
AllowGroups <組名> #允許通過遠程訪問的組,多個組以空格分隔
DenyUsers <用戶名> #禁止通過遠程訪問的用戶,多個用戶以空格分隔
DenyGroups <組名> #禁止通過遠程訪問的組,多個組以空格分隔

2、如果需要限制來路IP的話,可以修改/etc/hosts.deny和/etc/hosts.allow兩個文件,通過添加sshd:<IP地址或IP段>來限制或允許SSH遠程鏈接IP。

3、密鑰設置
A、用打算通過SSH登錄的帳號登錄系統,創建密鑰對
ssh-keygen -b 1024 -t rsa
當要求輸入passphrase密鑰保護時,建議不要默認為空。

B、進入此用戶的 .ssh目錄,將生成的公鑰文件(默認為id_rsa.pub)內容添加到與sshd_config中AuthorizedKeysFile設置項一樣的文件(authorized_keys)中,並刪除id_rsa.pub。
cat id_rsa.pub >>authorized_keys;rm -f id_rsa.pub

C、更改.ssh目錄的權限為700,authorized_keys文件的權限為600。

D、私鑰口令修改
ssh-keygen -p -P <舊私鑰口令> -N <新私鑰口令> -f <私鑰文件路徑>

二、基於密鑰認證的客戶端連接
linux:將私鑰文件id_rsa拷貝到客戶端<home>/.ssh/目錄(你也可以CP到任何其他什麽地方)中,重新命名,並設置權限chmod 600 <home>/.ssh/<PrivateKeyFileName>。
通過命令ssh -i ~/.ssh/<PrivateKeyFileName> <username>@<remote IP>登錄遠程機。
ssh客戶端在登陸服務端時,會把對應的公鑰寫入~/.ssh/known_hosts文件。如果密鑰發生改變,則將~/.ssh/known_hosts文件中對應的一行公鑰刪除,才能用新的私鑰登錄。

PUTTY:將私鑰文件id_rsa拷貝到客戶端,通過PUTTYGEN轉換RSA密鑰,保存私鑰為ppk格式,最後通過密鑰認證即可登錄遠程系統。

SecureCRT:將私鑰文件id_rsa拷貝到客戶端,在連接選項裏把authentication的驗證順序中的PublicKey放到最先的位置,打開PublicKey驗證的properties頁,identity file選擇id_rsa。


三、scp的使用
scp <源主機用戶名>@<源主機名>:<源文件或目錄路徑,多個文件以空格分隔> <目標主機用戶名>@<目標主機名>:<目標文件或目錄路徑>
如果源為本機的話,則只需要列出文件或目錄路徑即可。
常用參數 :
-v 顯示進度
-C 壓縮傳輸選項
-P 指定端口
-4 強行使用 IPV4 地址
-6 強行使用 IPV6 地址
-i 指定私鑰文件路徑
-r 遍歷路徑復制
-l 限制最大傳輸帶寬,單位是Kb/s

四、sftp配置
1、使用ssh -v確定軟件版本
openssh版本不低於4.8sp1
openssl版本不低於0.9.6
否則到官網下載最新版,卸載本機ssh後重新安裝,此時要切記如果是遠程操作的話應該切換至telnet!
#備份配置文件
cp /etc/ssh/sshd_config ~/sshd_conf

#獲取最新的openssh源碼
wget http://openbsd.org.ar/pub/OpenBSD/OpenSSH/portable/openssh-6.1p1.tar.gz

#查詢系統中ssh相關軟件包,並卸載
rpm -qa |grep ssh
rpm -e openssh-4.3p2-82.el5 --nodeps
rpm -e openssh-server-4.3p2-82.el5
rpm -e openssh-clients-4.3p2-82.el5 --nodeps

#解壓下載的壓縮包,並安裝
tar zxvf openssh-6.1p1.tar.gz
cd openssh-6.1p1
./configure --prefix=/usr/local/ssh --sysconfdir=/etc/ssh --with-pam --with-zlib --with-ssl-dir=/usr/local/ssl --with-md5-passwords --mandir=/usr/share/man
make
make install
#確認ssh安裝成功
ssh -v

#重建ssh服務運行環境
cp ~/sshd_config /etc/ssh/sshd_config
cp /usr/local/ssh/bin/* /usr/bin/
cp /usr/local/ssh/sbin/* /usr/sbin/
cp ./contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
chkconfig --level 2345 sshd on

#確認服務配置正常
chkconfig --list

#啟動ssh服務
/etc/init.d/sshd start

全部完成後,建議重啟系統。

2、創建sftp偽根目錄,確保所有者為root
例如:
mkdir /home/sftp
chown root /home/sftp

3、在系統中添加用戶,可以不建home,設置密碼。為了方便管理可以添加一個sftp組,將sftp登錄用戶集中管理。
例如:
groupadd sftp
useradd -g sftp -M user1

4、在/home/sftp下創建用戶目錄,確保所有者為對應用戶,並根據實際情況設置此目錄權限。
例如:
mkdir /home/sftp/user1
chown user1:sftp /home/sftp/user1
chmod 700 /home/sftp/user1

5、編輯/etc/ssh/sshd_config,具體如下:
註釋 Subsystem sftp /usr/lib/openssh/sftp-server
添加 Subsystem sftp internal-sftp
在配置文件末尾加入針對登錄用戶或sftp組的訪問限制
例如:
#sftp組成員登錄後,chroot到與用戶名同名的sftp下屬目錄
Match group sftp
ChrootDirectory /home/sftp/%u

#user1登錄後,chroot到/home/sftp/user1目錄
Match user user1
ChrootDirectory /home/sftp/user1

6、采用ChrootDirectory設置需要註意
ChrootDirectory設置的目錄及其所有的上級目錄屬主必須是root且只有屬主能擁有寫權限,也就是說權限最大設置只能是755。否則會報“fatal: bad ownership or modes for chroot directory”這樣的錯誤。
用戶目錄下的鏈接文件失去作用。

五、SSH客戶端保持連接的設置

方法1:服務端配置

編輯服務端/etc/ssh/sshd_config文件,添加如下配置命令:

ClientAliveInterval 60    #每60秒向客戶端發送一次確認心跳包
ClientAliveCountMax 3    #當客戶端失去響應超過3次,則踢出客戶端

方法2:客戶端配置(推薦)

編輯客戶端/etc/ssh/ssh_config文件或~/.ssh/ssh_config文件,添加如下配置命令:

TCPKeepAlive yes    #保持連接
ServerAliveInterval 60    #每60秒發送一次心跳包

方法3:命令行配置

針對某個特定連接,可以在ssh命令行中加入配置選項,以保持連接。

ssh -o TCPKeepAlive=yes -o ServerAliveInterval=60


註意:
如果更改了SSH服務端口後,無法登錄系統報“no route to host”錯。請檢查iptables的過濾策略,允許基於新端口的訪問。

sshd服務基本配置和使用(201610改)