在linux中SSH服務對應兩個配置文件:
ssh特點:在傳輸數據的時候,對文件加密后傳輸。
ssh作用:為遠程登錄會話和其他網絡服務提供安全性協議。
ssh小結:
1、SSH是安全的加密協議,用於遠程連接服務器。
2、SSH默認端口是22,安全協議版本有SSH2、SSH1。(SSH1有漏洞)
3、SSH服務端主要包含兩個服務功能SSH遠程連接和SFTP服務。
4、Linux SSH客戶端包含ssh遠程連接命令,以及遠程拷貝scp命令等。
ssh服務有如下兩個工具:
***服務端或客戶端版本不相同是連接不上的***
客戶端連接服務端基本口令(-p指定端口,不加為默認端口):
ssh -p22 root@10.0.0.10或ssh root@10.0.0.10
linux通信驗證所在地(等第一次登錄時會在本地殘生一個秘鑰文件~/.ssh/known_hosts【多個秘鑰】):
cd ~/.ssh/
SSH默認登錄文件相關參數配置
相關參數說明(/etc/ssh/sshd_config):
port :指定sshd進程監聽的端口號,默認為22.可以使用多條指令多個端口。默認為22,可以使用多條指令監聽多個端口。默認將在本機的所有網絡接口上監聽,但是可以通過ListenAddress指定只在特點的接口上監聽。
PermitEmptyPasswords :是否允許密碼為空的用戶遠程登錄。默認為“no”。
PermitRootLogin :是否允許root登錄。可用值如下:“without-password”表示使用密碼認證登錄。“forced-commands-only”表示只有指定了command選項的情況下允許使用公鑰認證登錄。同時其它認證方法全部禁止。這個值常
用語遠程備份之類的事情。(為了安全:不允許root用戶登錄,但可以登錄普通用戶使用sudo來執行相應的root命令)
UseDNS :指定sshd是否應該對遠程主機名進行方向解析,以檢查此主機名是否與其IP地址真實對應。默認值為“yes”。
在SSH服務中含有有SCP遠程拷貝服務:
SCP為遠程拷貝文件或目錄的命令(命令介紹):
-P(大寫) :接接口號,SSH默認端口為22,如果端口為22可以省略。
-r :遞歸,表示拷貝目錄。
-p(小寫) :表示在拷貝前后保存文件或目錄屬性。
-l :(limit)限速。
例子:
scp -P22 -rp /etc oldboy@10.0.0.10:/tmp
也可實現rsync的推拉操作(例子):
推:scp -P22 -rp /etc oldboy@10.0.0.10:/tmp
拉:scp -P22 -rp oldboy@10.0.0.10:/tmp/etc /data
限速:scp -P22 -rp -l 10 /etc oldboy@10.0.0.10:/tmp
scp小結:
1、scp是加密的遠程拷貝,而cp僅為本地拷貝。
2、可以把數據從一台機器推到另一台機器,也可以從其它服務器吧數據拉回到本地執行命令執行命令。
3、每次都是全量完整拷貝,因此,效率不高,適合一次性拷貝用,如果需要增量拷貝,用rsync。
SSH服務附帶的sftp功能服務
winds客戶端與linux服務器之間的傳輸數據工具:
1、rz、sz(lrzsz)
2、winscp WinSCP-4.0.5(基於SSH,SFTP)
3、SFX(xshell)
4、SFTP(基於SSH,加密傳輸)
5、samba,http,ftp,nfs
FTP工具:vsftp、proftpd、SFTP
sftp客戶端連接sftp服務方法(不安全):
1、sftp -oPort=22 oldboy@10.0.0.10 #l連接端口
2、cd /home/oldboy #可以切換指定的目錄
3、put /etc/hosts #把/etc/hosts客戶端本地傳輸到sftp服務器當前連接的目錄
4、mkdir /tmp/ett #也可以創建目錄
5、get /etc/hosts /home #可以下載文件(不指定位置默認下載到原登錄時的目錄位置)
使用密鑰認證的方法步驟:
1、生成密鑰(建議在普通用戶下生成為了安全):
ssh-keygen -t rsa
2、將公鑰發送給需要配置密鑰的用戶(該命令只能發送“公鑰=鎖”“私鑰=鑰匙”)
ssh-copy-id -i .ssh/id_rsa.pub "-p52113 names@172.16.1.100"
3、啟動公鑰認證:
修改配置文件/etc/ssh/sshd_config,將“PasswordAuthentication yes”修改為“PasswordAuthentication no”。
4、測試(不用密碼發送表示成功):
scp -P52113 hosts names@172.16.1.100:~ #端口號我改成了52113,原先以及拷貝了hosts放在家目錄中
5、為了安全在普通用戶中操作但是沒有權限,所有配給該用戶sudo的權限
6、跳轉到names用戶,然后執行命令測試
ssh -p52113 -t names@172.16.1.100 sudo rsync ~/hosts /etc/hosts #執行完后,我操作的/etc/hosts,但原先已經拷貝到了家目錄,所有直接傳遞
-t參數是sudo命令需要tty終端;而默認ssh沒有;所有ssh加 -t參數分配一個終端sudo的取消默認指向一個終端的命令,如果不想加-t參數可以直接把Defaults requiretty參數注釋掉(為了安全不建議)。路徑/etc/sudoers
非交互式傳輸:
第一步:安裝expect、添加用戶及創建密碼
yum install expect
useradd oldboy2
echo "oldboy"|passwd --stdin oldboy2
id oldboy2
su - oldboy2
第二步:創建密鑰
echo -e "\n"|ssh-keygen -t dsa -P ''
第三步:在管理機編輯 vim ssh_expect.exp添加如下代碼
***************************************************
#!/usr/bin/expect
if { $argc != 2 } {
send_user "usage: expect ssh_expect.exp file host\n"
exit
}
#define var
set file [lindex $argv 0]
set host [lindex $argv 1]
set password "oldboy"
#spawn scp /etc/hosts root@10.0.0.142:/etc/hosts
#spawn scp -P52113 $file oldboy@$host:$dir
spawn ssh-copy-id -i $file "-p 52113 oldboy2@$host"
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof
exit -onexit {
send_user "good bye"
}
***************************************************
第四步:推送公鑰
expect ssh_expect.exp ~/.ssh/id_dsa.pub 172.16.1.31
以上服務小結:
1、ssh為加密的遠程連接協議。相關軟件有openssh、openssl。
2、默認端口號為22.
3、服務端ssh遠程連接服務,sftp服務,sshd后湖進程,開機要自啟動。
4、ssh客戶端包含ssh、scp、sftp命令
5、ssh安全驗證方式:口令和密鑰,這兩種都是基於口令和ssh密鑰登錄的原理。
6、ssh服務安全優化,修改默認端口22,禁止root遠程連接,禁止dns,SSH只監聽內網IP。
7、ssh密鑰對,公鑰在服務器端,比喻就是鎖頭,私鑰在客戶端,比喻就是鑰匙。