使用SSH連接VirtualBox虛擬機(jī)
步驟:
- 配置虛擬機(jī)網(wǎng)絡(luò),添加端口轉(zhuǎn)發(fā)規(guī)則
- 測試服務(wù)器端ssh是否安裝
- 測試遠(yuǎn)程主機(jī)是否可以連接;注意提示信息
- 服務(wù)器安裝ssh
- 配置服務(wù)器防火墻
- 遠(yuǎn)程主機(jī)生成密鑰對
- 導(dǎo)入遠(yuǎn)程主機(jī)公鑰至服務(wù)器(無密登錄)
1. 配置虛擬機(jī)網(wǎng)絡(luò),添加端口轉(zhuǎn)發(fā)規(guī)則
1.1 橋接模式
虛擬機(jī)的網(wǎng)絡(luò)就相當(dāng)于主機(jī)一樣并行存在,所以當(dāng)前主機(jī)要連接到路由器或交換機(jī)等設(shè)備,以使兩個系統(tǒng)處于同一局域網(wǎng)。
1.2 網(wǎng)絡(luò)地址轉(zhuǎn)換NAT
NAT模式即虛擬機(jī)的網(wǎng)絡(luò)是完全依賴于物理主機(jī)的網(wǎng)絡(luò)。此時兩個系統(tǒng)并不是處于同一局域網(wǎng),不能簡單的ping通;
但是可以設(shè)置Virtualbox在NAT模式(網(wǎng)絡(luò)地址轉(zhuǎn)換NAT)下的端口轉(zhuǎn)發(fā)規(guī)則,通過設(shè)置規(guī)則可使主機(jī)連接虛擬機(jī)。
設(shè)置
-> 網(wǎng)絡(luò)
-> 網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)
-> 高級
-> 端口轉(zhuǎn)發(fā)
-> 添加規(guī)則
:
- 名稱可隨便填寫,如ssh
- 主機(jī)IP可以不填,或者填寫127.0.0.1
- 主機(jī)端口隨意填寫一個不會產(chǎn)生沖突的端口,如2222
- 子系統(tǒng)端口可以不填,或者填寫子系統(tǒng)當(dāng)前IP地址
- 子系統(tǒng)端口如果是要進(jìn)行ssh連接,則填寫22 ; ftp就填寫21
示例:
名稱 | 協(xié)議 | 主機(jī)IP | 主機(jī)端口 | 子系統(tǒng)IP | 子系統(tǒng)端口 |
---|---|---|---|---|---|
ftp | TCP | 2121 | 21 | ||
ssh | TCP | 2222 | 22 | ||
http | TCP | 8080 | 80 | ||
mysql | TCP | 127.0.0.1 | 3306 | 10.0.2.15 | 3306 |
oracle | TCP | 1521 | 1521 |
參考:
http://reverland.bitbucket.org/VirtualBox_net.html
http://www.myhack58.com/Article/48/66/2014/46228.htm
設(shè)置兩個網(wǎng)卡,一個NAT,一個橋接 http://my.oschina.net/dmdgeeker/blog/229044
centos7 虛擬機(jī)相互訪問的網(wǎng)卡設(shè)置
VirtualBox下虛擬機(jī)和主機(jī)內(nèi)網(wǎng)互通+虛擬機(jī)靜態(tài)IP的網(wǎng)絡(luò)配置
VirtualBox虛擬機(jī)網(wǎng)絡(luò)環(huán)境解析和搭建-NAT、橋接、Host-Only、Internal、端口映射
A short guide to networking in Virtual Box with Oracle Linux inside
詳細(xì)介紹
http://www.cnblogs.com/adforce/archive/2013/10/11/3363373.html
2. 測試服務(wù)器端ssh是否安裝
測試是否安裝ssh:
ssh localhost
//使用該命令后,如果已經(jīng)安裝,會提示你是否接收服務(wù)器發(fā)給你的公鑰,并讓你輸入yes/no,此時輸入 yes 。這樣才能對你發(fā)給服務(wù)器的信息進(jìn)行加密。
3. 測試遠(yuǎn)程主機(jī)是否可以連接
如果已經(jīng)安裝,則進(jìn)行這一步。
測試是否可以使用SSH連接 :使用密碼登錄(設(shè)置好端口轉(zhuǎn)發(fā)后)
因為端口不是常規(guī)默認(rèn)的,所以需要指定 port
如進(jìn)行ssh連接則在shell中輸入:
$ ssh -p 2222 username@127.0.0.1
或?qū)⑸厦娴?127.0.0.1 改為localhost
進(jìn)行sftp連接(其端口與ssh是一樣的,因為它是ssh的一部分):
$ sftp -o port=2222 username@127.0.0.1
由于SSH是使用非對稱密鑰來進(jìn)行安全認(rèn)證,所以在第一次與某主機(jī)通信時會提示你,連接的主機(jī)是不是可靠的。
所謂"公鑰登錄",原理很簡單,就是用戶將自己的公鑰儲存在遠(yuǎn)程主機(jī)上。登錄的時候,遠(yuǎn)程主機(jī)會向用戶發(fā)送一段隨機(jī)字符串,用戶用自己的私鑰加密后,再發(fā)回來。遠(yuǎn)程主機(jī)用事先儲存的公鑰進(jìn)行解密,如果成功,就證明用戶是可信的,直接允許登錄 shell,不再要求密碼。
ftp連接:
$ ftp host-name [port]
或
$ ftp
ftp> open host-name [port]
可能并不成功,不知是不是防火墻的問題,使用sftp就好了,更安全。
將上面的 username 改為自己的。
前提是虛擬機(jī)中的Linux安裝了ssh服務(wù)并開啟,且關(guān)閉了防火墻(或添加了相應(yīng)規(guī)則)。
如果測試不成功則跳轉(zhuǎn)到第5節(jié)
4. 服務(wù)器安裝ssh
安裝ssh:
sudo apt-get install openssh-server
啟動服務(wù):
sudo /etc/init.d/ssh start
查看是否啟動:
ps -e | grep sshd
配置防火墻
此時在遠(yuǎn)程客戶端進(jìn)行連接測試,如果可行
Linux 上安裝 ssh (Ubuntu & RedHat)
5. 配置服務(wù)器防火墻
5.1 配置動態(tài)防火墻firewalld
使用了動態(tài)防火墻:變更后無需重啟系統(tǒng)。它不能與靜態(tài)防火墻共存。
可以選擇開啟某個端口,或完全關(guān)閉防火墻
配置好防火墻后,跳轉(zhuǎn)到第3節(jié),進(jìn)行遠(yuǎn)程測試。
5.1.1 為服務(wù)器防火墻開啟22端口或開啟ssh服務(wù)
在CentOS7上默認(rèn)是開啟了 ssh 服務(wù)的。如果不行就試一下同時開啟端口。
firewall-cmd --permanent --add-port=22/tcp
或選擇
firewall-cmd --permanent --add-service=ssh
然后重新加載防火墻
systemctl reload firewalld
查看是否已經(jīng)開啟:
firewall-cmd --list-all
在列出的信息中,查看port開頭的行是否包含 22 。
5.1.2 關(guān)閉服務(wù)器防火墻
查看防火墻狀態(tài):
systemctl status firewalld
臨時關(guān)閉防火墻:
systemctl stop firewalld
永久關(guān)閉防火墻:
systemctl disable firewalld
打開防火墻:
systemctl enable firewalld
注意需要root權(quán)限。
5.2 配置靜態(tài)防火墻 iptables (不必)
fedora,centos等,基本都已經(jīng)使用動態(tài)防火墻(兩者不能共存)了。此處是否有效未知。
關(guān)閉:
service iptables stop
開啟:
service iptables start
開機(jī)默認(rèn)關(guān)閉防火墻:(即永久)
chkconfig iptables off
開機(jī)默認(rèn)開啟防火墻:
chkconfig iptables on
fedora不可用
參考: http://my.oschina.net/u/217959/blog/38051
生成SSH key
SSH原理與運用(一):遠(yuǎn)程登錄
SSH原理與運用(二):遠(yuǎn)程操作與端口轉(zhuǎn)發(fā)
Asrchlinux wiki:
Secure Shell (簡體中文)
SSH keys (簡體中文)
6. 遠(yuǎn)程主機(jī)生成密鑰對
這部分不大全面。
公鑰是一串很長的字符,為了便于肉眼比對和識別,所以有了指紋這東西,指紋位數(shù)更便于識別且與公鑰一一對應(yīng)。
運行命令ssh-keygen采用rsa加密算法生成密鑰對:
ssh-keygen -t rsa
生成密鑰對時,有一個選項要求你設(shè)置密碼passphrase,該密碼是用來保護(hù)你的私鑰的密碼。如果設(shè)置了則在使用私鑰時會要求你輸入這個密碼;一般不設(shè)置,記不住【之后還可更改此密碼,使用ssh-keygen -p】。
生成后最好將私鑰進(jìn)行備份。另還有-C
選項,用于為指定注釋通常使用自己的郵件名作為注釋。
-b
bits選項 Specifies the number of bits in the key to create. For RSA keys, the minimum size is 1024 bits and the default is 2048 bits. Generally, 2048 bits is considered sufficient. DSA keys must be exactly 1024 bits
示例:為了安全考慮使用RSA加密并設(shè)置 -b 4096
$ ssh-keygen -t rsa -C "your_email@example.com" -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa): 按回車鍵 (如果需要生成多對key,則輸入/home/users/.ssh/filename)
Enter passphrase (empty for no passphrase): 輸入密碼(一般不輸入密碼,直接回車)
Enter same passphrase again: 再次輸入密碼
...
# 查看公鑰文件中的內(nèi)容
$ cat ~/.ssh/id_rsa.pub
ssh-rsa "公鑰內(nèi)容" your_email@example.com
# 注意在其他地方導(dǎo)入公鑰時一定要將公鑰文件中的*全部內(nèi)容*都導(dǎo)入,包括末尾你的郵箱。(郵箱可能是由 -C 指定的??)
實際操作的一次示例:
[fan 16:10:57]~$ ssh-keygen -t rsa -C "Fan@outlook.com" -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fan/.ssh/id_rsa): /home/fan/.ssh/FDGitHub_rsa
Enter passphrase (empty for no passphrase): (不要密碼直接回車)
Enter same passphrase again:
Your identification has been saved in /home/fan/.ssh/FDGitHub_rsa.
Your public key has been saved in /home/fan/.ssh/FDGitHub_rsa.pub.
The key fingerprint is:
SHA256:GcK7ORvFzH6fzA7qPmnzBr1DOWho5cCVgIpLkh6VGb8 Fan@outlook.com
The key's randomart image is:
+---[RSA 4096]----+
| .+... . |
| +o. o |
| o.. oo.. |
|+o. +*.o |
| .=..+oo |
| +=o+= . |
| .++=.o* |
+----[SHA256]-----+
指紋的用處之一是在使用SSH第一連接到某主機(jī)時,會返回該主機(jī)使用的公鑰的指紋讓你識別。示例:
The authenticity of host '某主機(jī)名' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
簡單介紹一下:
公鑰用于給別人用來加密文件。公鑰就是一把鎖,你把鎖給別人,他用鎖鎖住東西后,除了你自己外其他人是沒有鑰匙(私鑰)的,都無法打開。配對的私鑰就是鑰匙。
必須保證使用你的公鑰的人明確知道這個公鑰一定是你的。你可以在網(wǎng)站或通過其它方式公布你的公鑰,以便他人進(jìn)行對照確認(rèn)。由于公鑰很長,所以有了對應(yīng)的指紋(指紋更易辨別,位數(shù)更少),可以通過指紋進(jìn)行對照(公布指紋)。
如需進(jìn)一步了解SSH Key的更多用法見《SSH key的生成與使用.md》
7. 導(dǎo)入遠(yuǎn)程主機(jī)公鑰至服務(wù)器,并進(jìn)行配置(無密登錄)
7.1 導(dǎo)入公鑰
把公鑰上傳到服務(wù)器端有很多方法:
- 使用sftp
- 使用ssh-copy-id
- 使用scp
- ...
使用sftp的示例:
#先使用sftp進(jìn)行連接
$ sftp -o port=2222 root@127.0.0.1
#連接之后,(可使用help命令查看幫助)。
sftp> put ~/.ssh/id_rsa.pub ~/
使用ssh-copy-id的示例:
默認(rèn)上傳到~/.ssh/id_ecdsa.pub
#簡便形式;(如果名字為默認(rèn)則可免去指定公鑰名)
$ ssh-copy-id -p 2222 root@127.0.0.1
#另一個示例
$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 221 username@remote-server.org
上傳之后:
導(dǎo)入公鑰內(nèi)容到指定的文件中
$ cat ~/路徑/id_rsa.pub >> ~/.ssh/authorized_keys
保證 authorized_keys 文件的安全
$ chmod 600 ~/.ssh/authorized_keys
7.2 配置ssh服務(wù)
sshd的配置文件位于: /etc/ssh/sshd_config
只需配置:
GSSAPIAuthentication no #無需查詢DNS,加快速度
PermitRootLogin yes #允許root的ssh登錄;虛擬機(jī)圖個方便而已,建議關(guān)閉
PubkeyAuthentication yes #啟用公鑰驗證
AuthorizedKeysFile .ssh/authorized_keys #公鑰的保存位置,記住即可之后需要用到
PasswordAuthentication yes #允許使用密碼驗證登錄,實際建議關(guān)閉
PermitEmptyPasswords no #是否允許空密碼登錄,no
關(guān)閉服務(wù)器中的SELinux服務(wù):
其配置文件是: /etc/selinux/config
在文件中添加:
SELINUX=permissive
重啟系統(tǒng) 或 使用root賬戶運行:setenforce Permissive
服務(wù)器端重啟ssh服務(wù):
service sshd restart
8 相關(guān)問題
連接時出現(xiàn)的提示信息
相關(guān)示例:
有一次出現(xiàn):
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 98:ab:2b:30:60:00:82:86:bb:85:db:87:22:c4:4f:b1. Please contact your system administrator.
這可能是我配置了兩臺虛擬機(jī),虛擬機(jī)配置端口轉(zhuǎn)發(fā)時設(shè)置的IP地址和端口都是相同的。才導(dǎo)致此提示該主機(jī)的指紋(也可能是指公鑰)已經(jīng)改變;更改了端口就沒有問題了。(另一種做法是刪除.ssh/known_hosts文件,以后連接時再全部重新導(dǎo)入)
后一次出現(xiàn)
[root]~ $ sftp -o port=2222 root@127.0.0.1
The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established(建立).
ECDSA key fingerprint(指紋) is SHA256:JE63mxnefTg1Hc/x5BhF+rdWmkFN6FiOBRoye56odW4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently(永久的) added '[127.0.0.1]:2222' (ECDSA) to the list of known hosts.
root@127.0.0.1's password:
這段提示用于提示你是否信任該主機(jī)(這里指服務(wù)器),如果輸入yes則信任該主機(jī)并且將該服務(wù)器的公鑰追加到 .ssh/known_hosts文件中。