ssh客户端
ssh客戶端
ssh,配置文件:/etc/ssh/ssh_config
在配置文件/etc/ssh/ssh_config中Strict HostKey Checking no 首次登錄不顯示檢查提示。
格式:ssh [user@]host IP地址 [command]
ssh [-l user]host IP地址 [command]
(如果不指定用戶,你是哪個用戶就連接哪個用戶上,后面還可跟命令)
?
Ssh客戶端允許實現對遠程系統經驗證地加密安全訪問
當用戶遠程連接ssh服務器時,會復制ssh服務器/etc/ssh/ssh_host*key.pub(CentOS7默認是ssh_host_ecdsa_key.pub)文件中的公鑰到客戶機的~./ssh/know_hosts中。下次連接時,會自動匹配相應私鑰,不能匹配,將拒絕連接
?
下面來看一下ssh的一些選項:
-p port端口號:遠程服務器監聽的端口
例如:ssh 192.168.10.178 -p 2222 如果將服務器的端口改為2222,再用ssh連接不指定端口(默認是22端口),此時就無法連接,連接時指定端口號就可以連接了。
改端口號:semanage port -a -t ssh_port_t -p tcp 端口號 (如果啟用了SELinux策略,改的端口號為非標準端口號,違反了SELinux策略,直接修改配置文件是不可以的,要用這種方法去修改,記得改完之后重啟一下sshd服務)
-b 指定源IP來連接服務器
-v:調試模式(連接的時候發現一些錯誤,可以用-v來排錯)
-C:壓縮方式
-X: 支持x11轉發
xclock命令在centos6上面可以打開小鐘表,在centos7上面打不開,現在我用centso7去連接centos6,直接連接上去,執行xclock命令是打不開小鐘表的,需要價格-X選項,才能打開
-Y:支持信任x11轉發
ForwardX11Trusted yes
-t: 強制偽tty分配
?
小實驗:
如圖:假如企業內部有兩臺機器B,C,其中C是ssh service ,企業內部連接互聯網是通過防火墻來連接的,只有B才能連接到C,A不能直接連接C,假如A出差了,在企業外部,現在A想要連接C,怎樣連接呢?A可以連接到B,通過B這個跳板再來連接到C ssh -t B(ip地址) ssh C(ip地址)
?
?
實驗環境:有3臺機器A,B,C,這3臺機器都在一個網段中。
1)先在C機器上制定防火墻策略,拒絕A機器連接iptables -A INPUT -s 192.168.10.136 -j REJECT
這樣A就不能直接連接C了,,B可以連接C,A可以連接B,所以B可以做跳板,讓A借助B來連接C
2)ssh -t 192.168.10.135 ssh 192.168.10.178 這樣就能連接了,需要輸入兩次密碼
?
常見的ssh連接問題
在用ssh連接的時候我們會遇到一些問題,接下來介紹一下這些問題和解決這些問題的方案
(1)解決ssh連接較慢的方案
我們在用ssh連接的時候可能會非常慢,可以調整服務器端的配置文件,修改以下兩項,重啟服務,就能生效,再重啟sshd服務,之后再用ssh連接就非常快了
vim /etc/ssh/sshd_config 編輯服務器端的配置文件
?
然后systemctl restart sshd.service(centos7)或service sshd restart(centos6),重啟一下sshd服務,就可以了
(2)去掉ssh第一次連接服務器提示的yes or no?
當某臺機器第一次去連接某服務器時,會問你是否要繼續連接,yes or no?,敲了yes就會在家目錄下的.ssh目錄下生成了一個known_hosts文件,這個文件就記錄了你所連接的每一臺服務器的公鑰key(如下圖我目前只連接了一個服務器,所以只有一個服務器的公鑰key)
下面就來修改配置文件來解決這個問題
vim /etc/ssh/sshd_config
將該項改為no,第一次連接不用提示yes或者no
?
(3)/etc/ssh中的key不能被破壞
ssh中的key不能被破壞,如果這些key都被刪了,ssh服務不能被啟動
先關閉了sshd服務,再開啟sshd服務,然后就發現啟動失敗
再把/app/下的key移回來就可以啟動成功了。
?
ssh服務登錄驗證方式
1.用戶/口令
2.基于密鑰
1.基于用戶名口令登錄驗證
基于用戶和口令登錄驗證(客戶端用服務器的公鑰加密密碼,再發給服務器,服務器再拿私鑰解開密碼,驗證密碼是否正確)
1)客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶
2)用戶會根據服務器發來的公鑰對密碼進行加密
3)加密后的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功
2.基于密鑰的登錄方式
1)首先在客戶端生成一對密鑰(ssh-keygen)
2)并將客戶端的公鑰ssh-copy-id 拷貝到服務端
3)當客戶端再次發送一個連接請求,包括ip、用戶名
4)服務端得到客戶端的請求后,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:acdf
5)服務端將使用客戶端拷貝過來的公鑰進行加密,然后發送給客戶端
6)得到服務端發來的消息后,客戶端會使用私鑰進行解密,然后將解密后的字符串發送給服務端
7)服務端接受到客戶端發來的字符串后,跟之前的字符串進行對比,如果一致,就允許免密碼登錄
基于密鑰的認證:
1)在客戶端生成密鑰對 ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
-t 指定算法 (默認是rsa算法) -P指定私鑰的口令,什么都不寫就是生成的私鑰沒有口令 -f 指定私鑰文件路徑(默認是/root/.ssh/id_rsa)
2)把公鑰文件傳輸至遠程服務器對應用戶的家目錄 ssh-copy-id -i /root/.ssh/id_rsa 192.168.10.107
ssh-copy -i /root/.ssh/id_rsa 192.168.10.107 該命令看似傳輸的是私鑰,其實傳輸的是公鑰,我們來看一下公私鑰是什么樣的
如下圖:我們看到公私鑰的內容
?
在服務器上的家目錄下查看一下authorized_keys這個文件是否生成
再來查看一下這個文件authorized_keys
對比一下上面的公私鑰的內容,可以發現傳輸的確實是公鑰
3)測試
好了,現在我們開始連接服務器了,如下圖,發現直接就能連接上去了,不用輸密碼
4)在SecureCRT或Xshell實現基于key驗證
在SecureCRT工具—>創建公鑰—>生成Identity.pub文件
轉化為openssh兼容格式(適合SecureCRT,Xshell不需要轉化格式),并復制到需登錄主機上相應文件authorized_keys中,注意權限必須為600,在需登錄的ssh主機上執行:
ssh-keygen-i-f Identity.pub >> .ssh/authorized_keys
5)重設私鑰口令:ssh-keygen –p
如果你覺得你的口令不安全,就可以重設私鑰口令,我們上面就沒有對私鑰設口令,這是很不安全的,下面我就給私鑰重設口令,如下圖,我們可以發現重設私鑰密碼后,再去連接服務器,就不會那么容易了,需要你輸入設定的私鑰密碼
6)驗證代理(authentication agent)保密解密后的密鑰
?這樣口令就只需要輸入一次
?在GNOME中,代理被自動提供給root用戶
?否則運行ssh-agent bash
7)鑰匙通過命令添加給代理
ssh-add
第六步和第七步合在一起用,我們在管理多臺服務器時,你要一個一個的連接,一個一個的輸密碼,連接上去,這樣十分麻煩的,而且效率低下,我們可以基于秘鑰登陸的方式,來連接多臺服務器,這樣你在連接多臺服務器時,就不用一個一個的輸入每一臺服務器的密碼了,你只需記住一個私鑰密碼,連接的時候輸入私鑰密碼,就可以連接多臺服務器了,如果你連私鑰密碼都懶得輸入,就可以將第六步和第七步結合在一起使用,如下圖,先驗證代理,再把私鑰密碼托管給代理,這樣你再去連接其他服務器就不用輸入私鑰密碼了
?
scp命令–走ssh端口的遠程復制命令
scp[options] SRC... DEST/ 源可以有多個
兩種方式:可以將遠程主機的文件拷到本機上,也可以將本機的文件拷到遠程主機
scp[options] [user@]host:/sourcefile /destpath
scp 192.168.10.178:/app/testdir/ /app/linshi
scp[options] /sourcefile [user@]host:/destpath
scp /app/linshi 192.168.10.178:/app/testdir
常用選項:
-C:壓縮數據流
-r:遞歸復制
-p:保持原文件的屬性信息
-q:靜默模式
-P port:指明remote host 的監聽的端口
rsync命令–更聰明的復制
基于ssh和rsh服務實現高效率的遠程系統之間復制文件
使用安全的shell連接做為傳輸方式
?rsync –av/etc server1:/tmp復制目錄和目錄下文件
?rsync –av/etc/ server1:/tmp只復制目錄下文件
如下圖:testdir后面不加/,復制testdir目錄和目錄下文件,加/,只復制testdir目錄下的文件,testdir目錄文身不復制
比scp更快,只復制不同的文件,若只是想更新變化了的文件,就用rsync
選項:
-n 模擬復制過程(并不真實去復制,只是演示一下復制過程)
-v 顯示詳細過程
-r 遞歸復制目錄樹
-p 保留權限
-t 保留時間戳
-g 保留組信息
-o 保留所有者信息
-l 將軟鏈接文件本身進行復制(默認)
-L 將軟鏈接文件指向的文件復制
-a 存檔,相當于–rlptgoD,但不保留ACL(-A)和SELinux屬性(-X)
?
好了就,今天的內容就到這里,希望對大家能有所幫助
?
?
?
?
?
?
?
?
?
總結
- 上一篇: java doubke类型转换为Stri
- 下一篇: 东莞绿色世界(东莞免费开放的植物园)