注:以下是Unix-like的相關操作 Windows 並沒有 ssh 的客戶端程序,因此所有的程序windows都得要下載其他第三方軟件才行
主要有 pietty, psftp 及 filezilla 等
putty/pscp/psftp 他們分別對應了 ssh/scp/sftp Windows的相關軟件操作 不做介紹
SSH 協議,在預設的狀態中,本身就提供兩個服務器功能:
1. 一個就是類似 telnet 的遠程聯機使用 shell 的服務器,亦即是俗稱的 ssh ;
2. 另一個就是類似 FTP 服務的 sftp-server !提供更安全的 FTP 服務。
非對稱密鑰系統
透過兩把不一樣的公鑰與私鑰來進行加密與解密的過程
公鑰 (public key):提供給遠程主機進行數據加密的行爲,也就是說,大家都能取得你的公鑰來將數據加密的意思;
私鑰 (private key):遠程主機使用你的公鑰加密的數據,在本地端就能夠使用私鑰來進行解密。私鑰是不能夠外流的!只能保護在自己的主機上。
目前在 SSH 使用上,主要是利用 RSA/DSA/Diffie-Hellman 等機制喔!
ssh聯機過程
1. 服務器建立公鑰文件:
每一次啓動 sshd 服務時,該服務會主動去找 /etc/ssh/ssh_host* 的文件, sshd 會主動去計算出這些需要的公鑰文件,和主機自己需要的私鑰文件
重裝系統也會執行以上操作
2. 客戶端主動聯機要求:
若客戶端想要聯機到 ssh 服務器,則需要使用適當的客戶端程序來聯機,包括 ssh, pietty 等客戶端程序;
3. 服務器傳送公鑰給客戶端:
接收到客戶端的聯機要求後,服務器便將第一個步驟取得的公鑰傳送給客戶端使用 (此時應是明碼傳送,反正公鑰本來就是給大家使用的!);
4. 客戶端記錄/比對服務器的公鑰數據及隨機計算自己的公私鑰:
client第一次聯機會把server的公鑰文件記錄到用戶家目錄內的 ~/.ssh/known_hosts 。
若已經記錄過了,則客戶端會去比對此次接收到的與之前的記錄是否有差異。若接受此公鑰數據, 則開始計算客戶端自己的公私鑰數據;
密鑰是隨機運算產生於每次聯機當中
5. 回傳客戶端的公鑰數據到服務器端:
用戶將自己的公鑰傳送給服務器。
此時服務器:『具有服務器的私鑰與客戶端的公鑰』,
客戶端則是: 『具有服務器的公鑰以及客戶端自己的私鑰』
在此次聯機的服務器與客戶端的密鑰系統 (公鑰+私鑰) 並不一樣,所以才稱爲非對稱式密鑰系統。
6. 開始雙向加解密:
(1)服務器到客戶端:服務器傳送數據時,拿用戶的公鑰加密後送出。客戶端接收後,用自己的私鑰解密;
(2)客戶端到服務器:客戶端傳送數據時,拿服務器的公鑰加密後送出。服務器接收後,用服務器的私鑰解密。
啓動ssh服務
Unix-like 系統當中,默認就已經含有 SSH 的所有需要的軟件了!其中包含了
可以產生密碼等協議的LinuxOpenSSL軟件和OpenSSH軟件
服務端直接啓動就是以 SSH daemon ,簡稱爲 sshd 來啓動
[root@www ~]# /etc/init.d/sshd restart
[root@www ~]# netstat -tlnp | grep ssh
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::22 :::* LISTEN 1539/sshd
客戶端連接服務器 使用ssh指令
[root@www ~]# ssh [-f] [-o 參數項目] [-p 非正規埠口] [賬號@]IP [指令]
選項與參數:
-f :需要配合後面的 [指令] ,不登入遠程主機直接發送一個指令過去而已;
-o 參數項目:主要的參數項目有:
ConnectTimeout=秒數 :聯機等待的秒數,減少等待的時間
StrictHostKeyChecking=[yes|no|ask]:預設是 ask,若要讓 public key
主動加入 known_hosts ,則可以設定爲 no 即可。
-p :如果你的 sshd 服務啓動在非正規的埠口 (22),需使用此項目;
[指令] :不登入遠程主機,直接發送指令過去。但與 -f 意義不太相同。
ssh 192.168.129.158 1
The authenticity of host '192.168.129.158 (192.168.129.158)' can't be established.
RSA key fingerprint is b5:49:85:1e:6d:0d:81:2d:2d:ef:30:12:cd:36:0d:fe. 這一行後邊的就是遠程服務器的公鑰指紋碼
Are you sure you want to continue connecting (yes/no)? yes 輸入 yes 將指紋碼寫入本地公鑰記錄文件 (~/.ssh/known_hosts)
Warning: Permanently added '192.168.129.158' (RSA) to the list of known hosts. 加入之後未來比對該服務器的正確性之用
登陸服務器執行指令之後立刻離開 常用在需要關閉遠程服務器時使用
[Jade@localhost-3:~] ssh -f [email protected] find / &> ~/find1.log
[email protected]'s password:
聯機時自動在本地添加公鑰 寫程序腳本需要連接多臺主機時比較有用
[Jade@localhost-3:~]ssh -o StrictHostKeyChecking=no [email protected]
Warning: Permanently added '192.168.129.158' (RSA) to the list of known hosts.
[email protected]'s password:
如果服務器的ssh公鑰變化(比如刪除了服務器/etc/ssh/ssh_host_*文件 或重裝系統後)那麼客戶端ssh聯機時就會報錯
因爲本地存儲的公鑰(~/.ssh/know_host中對應ip後的數據)和服務器的公鑰不同造成 此時只要刪除本地know_host對應ip的行 重新連接寫入即可
[Jade@localhost-3:~/shell] ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
46:69:89:d8:b7:e1:28:49:ac:4f:92:fd:8e:2d:a2:05.
Please contact your system administrator.
Add correct host key in /Users/Jade/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/Jade/.ssh/known_hosts:42
RSA host key for 192.168.129.158 has changed and you have requested strict checking.
Host key verification failed.
sftp:使用ssh的通道(part22)模擬FTP的文件上傳與下載
[Jade@localhost-3:~] sftp [email protected]
[email protected]'s password:
Connected to 192.168.129.158.
sftp> 這裏即可輸入ftp相關的指令
針對遠方服務器主機 (Server) 之行爲 | |
變換目錄到 /etc/test 或其他目錄 | cd /etc/test cd PATH |
列出目前所在目錄下的文件名 | ls dir |
建立目錄 | mkdir directory |
刪除目錄 | rmdir directory |
顯示目前所在的目錄 | pwd |
更改檔案或目錄羣組 | chgrp groupname PATH |
更改檔案或目錄擁有者 | chown username PATH |
更改檔案或目錄的權限 | chmod 644 PATH 其中,644 與權限有關!回去看基礎篇! |
建立連結檔 | ln oldname newname |
刪除檔案或目錄 | rm PATH |
更改檔案或目錄名稱 | rename oldname newname |
離開遠程主機 | exit (or) bye (or) quit |
針對本機 (Client) 之行爲(都加上 l, L 的小寫 ) | |
變換目錄到本機的 PATH 當中 | lcd PATH |
列出目前本機所在目錄下的文件名 | lls |
在本機建立目錄 | lmkdir |
顯示目前所在的本機目錄 | lpwd |
針對資料上傳/下載的行爲 | |
將檔案由本機上傳到遠程主機 | put [本機目錄或檔案] [遠程] put [本機目錄或檔案] 如果是這種格式,則檔案會放置到目前遠程主機的目錄下! |
將檔案由遠程主機下載回來 | get [遠程主機目錄或檔案] [本機] get [遠程主機目錄或檔案] 若是這種格式,則檔案會放置在目前本機所在的目錄當中!可以使用通配符,例如: get * get *.rpm 亦是可以的格式! |
注意上傳文件夾的話需要OpenSSH 5.4即以上
scp:異地直接複製
[root@www ~]# scp [-pr] [-l 速率] file [賬號@]主機:目錄名 <==上傳
[root@www ~]# scp [-pr] [-l 速率] [賬號@]主機:file 目錄名 <==下載
選項與參數:
-p :保留原本檔案的權限數據;
-r :複製來源爲目錄時,可以複製整個目錄 (含子目錄)
-l :可以限制傳輸的速度,單位爲 Kbits/s ,例如 [-l 800] 代表傳輸速限 100Kbytes/s
將本地的shell目錄 保留原本文件權限數據 複製到遠程主機~/目錄下
[Jade@localhost-3:~] scp -pr shell [email protected]:~/
[email protected]'s password:
將遠程文件複製到本地
[Jade@localhost-3:~] scp [email protected]:~/top.txt ./
[email protected]'s password:
top.txt
sshd服務器詳細設定
[root@bird ~]# vim /etc/ssh/sshd_config
只要是預設有出現且被批註的(#)設定值爲默認值
通常只是設置不允許root的ssh登錄 ssh的版本設爲V2 其餘默認已經很好
製作不用密碼立即登入的ssh用戶
1. 客戶端建立兩把鑰匙:利用的指令爲 ssh-keygen 這個命令;
2. 客戶端放置好私鑰文件:將 Private Key 放在 Client 上面的家目錄,亦即 $HOME/.ssh/ , 並且得要注意權限喔!
3. 將公鑰放置服務器端的正確目錄與文件名去:
最後,將那把 Public Key 放在任何一個你想要用來登入的服務器端的某 User 的家目錄內之 .ssh/ 裏面的認證文件即可完成整個程序。
爲jade用戶(新創建的)設置ssh的無需密碼登錄服務器
client操作
jade用戶創建密鑰文件
bash-3.2$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/jade/.ssh/id_rsa):
Created directory '/Users/jade/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/jade/.ssh/id_rsa.
Your public key has been saved in /Users/jade/.ssh/id_rsa.pub.
The key fingerprint is:
94:6b:ad:7b:b5:77:0d:b1:fc:f3:34:77:18:23:53:cb [email protected]
注意目錄和兩個密鑰文件的權限設定
bash-3.2$ ls -ld .ssh/; ls -l .ssh/
drwx------ 4 jade staff 136 11 23 14:32 .ssh/
total 16
-rw------- 1 jade staff 1675 11 23 14:32 id_rsa
-rw-r--r-- 1 jade staff 404 11 23 14:32 id_rsa.pub
將公鑰上傳到服務器的用戶家目錄
bash-3.2$ scp ~/.ssh/id_rsa.pub [email protected]:~
server操作
/home/wanjiadi/下如果沒有.ssh目錄 手動創建 注意權限
[jade@bird ~]# mkdir .ssh;chmod 700 .ssh
將client端上傳的公鑰使用cat 新增到authorized_keys中
[jade@bird ~]# cat id_rsa.pub >> .ssh/authorized_keys
[jade@bird ~]# chmod 644 .ssh/authorized_keys
[jade@bird ~]# ls -l .ssh
-rw-r--r--. 1 jade jade 404 11月 23 18:34 authorized_keys
當你還想要登入其他的主機時,只要將你的 public key copy 到其他主機上面去,並且新增到某賬號的 ~/.ssh/authorized_keys 這個文件中即可
建議安全設定
其實sshd的數據是加密的 所以在Internet上面傳遞時比較安全 至於sshd服務本身並不是那麼安全 安全設定建議 以下三條
服務器軟件本身的設定強化:/etc/ssh/sshd_config
# 修改 sshd_config 並且重新啓動 sshd !
[root@www ~]# vim /etc/ssh/sshd_config
PermitRootLogin no <==約在第 39 行,請拿掉批註且修改成這樣
DenyGroups nossh <==底下這兩行可以加在檔案的最後面
DenyUsers testssh
TCP wrapper 的使用:/etc/hosts.allow, /etc/hosts.deny
[root@www ~]# vim /etc/hosts.allow
sshd: 127.0.0.1 192.168.1.0/255.255.255.0 192.168.100.0/255.255.255.0
[root@www ~]# vim /etc/hosts.deny
sshd : ALL
iptables 的使用: iptables.rule, iptables.allow
[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $EXTIF -s 192.168.100.0/24 -p tcp --dport 22 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule
ssh進階應用
非22端口啓動ssh服務
很多 cracker 會使用掃描程序亂掃整個 Internet 的端口漏洞,這個 port 22 就是一個很常被掃描的端口
[root@www ~]# vim /etc/ssh/sshd_config Port 4444 Port 4445 <==注意喔!要有兩個 Port 的設定才行! [root@www ~]# /etc/init.d/sshd restart
centos6.7直接就可以使用了 老版本可能會出現SELinux的錯誤 必須自行定一個SELinux的規則放行模塊才行
# 1. 於 /var/log/audit/audit.log 找出與 ssh 有關的 AVC 信息,並轉爲本地模塊 |
聯機方式指定端口
[Jade@localhost-3:~] ssh [email protected] -p4444
查看端口使用情況
[root@bird ~]# netstat -tnp | grep 4444
tcp 0 0 192.168.129.158:4444 192.168.129.174:49988 ESTABLISHED 15879/sshd
rsync進行同步鏡像備份
見rsync篇筆記