使用SSH連接VirtualBox虛擬機
步驟:
- 配置虛擬機網(wǎng)絡(luò)喷面,添加端口轉(zhuǎn)發(fā)規(guī)則
- 測試服務(wù)器端ssh是否安裝
- 測試遠程主機是否可以連接鹃栽;注意提示信息
- 服務(wù)器安裝ssh
- 配置服務(wù)器防火墻
- 遠程主機生成密鑰對
- 導(dǎo)入遠程主機公鑰至服務(wù)器(無密登錄)
1. 配置虛擬機網(wǎng)絡(luò)慨削,添加端口轉(zhuǎn)發(fā)規(guī)則
1.1 橋接模式
虛擬機的網(wǎng)絡(luò)就相當(dāng)于主機一樣并行存在灾搏,所以當(dāng)前主機要連接到路由器或交換機等設(shè)備疼鸟,以使兩個系統(tǒng)處于同一局域網(wǎng)失都。
1.2 網(wǎng)絡(luò)地址轉(zhuǎn)換NAT
NAT模式即虛擬機的網(wǎng)絡(luò)是完全依賴于物理主機的網(wǎng)絡(luò)柏蘑。此時兩個系統(tǒng)并不是處于同一局域網(wǎng),不能簡單的ping通粹庞;
但是可以設(shè)置Virtualbox在NAT模式(網(wǎng)絡(luò)地址轉(zhuǎn)換NAT)下的端口轉(zhuǎn)發(fā)規(guī)則咳焚,通過設(shè)置規(guī)則可使主機連接虛擬機。
設(shè)置
-> 網(wǎng)絡(luò)
-> 網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)
-> 高級
-> 端口轉(zhuǎn)發(fā)
-> 添加規(guī)則
:
- 名稱可隨便填寫庞溜,如ssh
- 主機IP可以不填革半,或者填寫127.0.0.1
- 主機端口隨意填寫一個不會產(chǎn)生沖突的端口,如2222
- 子系統(tǒng)端口可以不填,或者填寫子系統(tǒng)當(dāng)前IP地址
- 子系統(tǒng)端口如果是要進行ssh連接又官,則填寫22 ; ftp就填寫21
示例:
名稱 | 協(xié)議 | 主機IP | 主機端口 | 子系統(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 虛擬機相互訪問的網(wǎng)卡設(shè)置
VirtualBox下虛擬機和主機內(nèi)網(wǎng)互通+虛擬機靜態(tài)IP的網(wǎng)絡(luò)配置
VirtualBox虛擬機網(wǎng)絡(luò)環(huán)境解析和搭建-NAT六敬、橋接碘赖、Host-Only、Internal外构、端口映射
A short guide to networking in Virtual Box with Oracle Linux inside
詳細介紹
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ù)器的信息進行加密割笙。
3. 測試遠程主機是否可以連接
如果已經(jīng)安裝,則進行這一步眯亦。
測試是否可以使用SSH連接 :使用密碼登錄(設(shè)置好端口轉(zhuǎn)發(fā)后)
因為端口不是常規(guī)默認的伤溉,所以需要指定 port
如進行ssh連接則在shell中輸入:
$ ssh -p 2222 username@127.0.0.1
或?qū)⑸厦娴?127.0.0.1 改為localhost
進行sftp連接(其端口與ssh是一樣的,因為它是ssh的一部分):
$ sftp -o port=2222 username@127.0.0.1
由于SSH是使用非對稱密鑰來進行安全認證,所以在第一次與某主機通信時會提示你妻率,連接的主機是不是可靠的乱顾。
所謂"公鑰登錄",原理很簡單宫静,就是用戶將自己的公鑰儲存在遠程主機上走净。登錄的時候,遠程主機會向用戶發(fā)送一段隨機字符串孤里,用戶用自己的私鑰加密后伏伯,再發(fā)回來。遠程主機用事先儲存的公鑰進行解密捌袜,如果成功说搅,就證明用戶是可信的,直接允許登錄 shell虏等,不再要求密碼弄唧。
ftp連接:
$ ftp host-name [port]
或
$ ftp
ftp> open host-name [port]
可能并不成功,不知是不是防火墻的問題霍衫,使用sftp就好了候引,更安全。
將上面的 username 改為自己的敦跌。
前提是虛擬機中的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
配置防火墻
此時在遠程客戶端進行連接測試,如果可行
Linux 上安裝 ssh (Ubuntu & RedHat)
5. 配置服務(wù)器防火墻
5.1 配置動態(tài)防火墻firewalld
使用了動態(tài)防火墻:變更后無需重啟系統(tǒng)傻寂。它不能與靜態(tài)防火墻共存息尺。
可以選擇開啟某個端口,或完全關(guān)閉防火墻
配置好防火墻后疾掰,跳轉(zhuǎn)到第3節(jié)搂誉,進行遠程測試。
5.1.1 為服務(wù)器防火墻開啟22端口或開啟ssh服務(wù)
在CentOS7上默認是開啟了 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
開機默認關(guān)閉防火墻:(即永久)
chkconfig iptables off
開機默認開啟防火墻:
chkconfig iptables on
fedora不可用
參考: http://my.oschina.net/u/217959/blog/38051
生成SSH key
SSH原理與運用(一):遠程登錄
SSH原理與運用(二):遠程操作與端口轉(zhuǎn)發(fā)
Asrchlinux wiki:
Secure Shell (簡體中文)
SSH keys (簡體中文)
6. 遠程主機生成密鑰對
這部分不大全面望抽。
公鑰是一串很長的字符加矛,為了便于肉眼比對和識別,所以有了指紋這東西煤篙,指紋位數(shù)更便于識別且與公鑰一一對應(yīng)斟览。
運行命令ssh-keygen采用rsa加密算法生成密鑰對:
ssh-keygen -t rsa
生成密鑰對時,有一個選項要求你設(shè)置密碼passphrase辑奈,該密碼是用來保護你的私鑰的密碼苛茂。如果設(shè)置了則在使用私鑰時會要求你輸入這個密碼;一般不設(shè)置鸠窗,記不住【之后還可更改此密碼妓羊,使用ssh-keygen -p】。
生成后最好將私鑰進行備份稍计。另還有-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第一連接到某主機時抢埋,會返回該主機使用的公鑰的指紋讓你識別弹灭。示例:
The authenticity of host '某主機名' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
簡單介紹一下:
公鑰用于給別人用來加密文件督暂。公鑰就是一把鎖,你把鎖給別人穷吮,他用鎖鎖住東西后逻翁,除了你自己外其他人是沒有鑰匙(私鑰)的,都無法打開捡鱼。配對的私鑰就是鑰匙八回。
必須保證使用你的公鑰的人明確知道這個公鑰一定是你的。你可以在網(wǎng)站或通過其它方式公布你的公鑰驾诈,以便他人進行對照確認缠诅。由于公鑰很長,所以有了對應(yīng)的指紋(指紋更易辨別乍迄,位數(shù)更少)管引,可以通過指紋進行對照(公布指紋)。
如需進一步了解SSH Key的更多用法見《SSH key的生成與使用.md》
7. 導(dǎo)入遠程主機公鑰至服務(wù)器闯两,并進行配置(無密登錄)
7.1 導(dǎo)入公鑰
把公鑰上傳到服務(wù)器端有很多方法:
- 使用sftp
- 使用ssh-copy-id
- 使用scp
- ...
使用sftp的示例:
#先使用sftp進行連接
$ sftp -o port=2222 root@127.0.0.1
#連接之后褥伴,(可使用help命令查看幫助)。
sftp> put ~/.ssh/id_rsa.pub ~/
使用ssh-copy-id的示例:
默認上傳到~/.ssh/id_ecdsa.pub
#簡便形式漾狼;(如果名字為默認則可免去指定公鑰名)
$ 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登錄;虛擬機圖個方便而已邦投,建議關(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.
這可能是我配置了兩臺虛擬機,虛擬機配置端口轉(zhuǎn)發(fā)時設(shè)置的IP地址和端口都是相同的猛们。才導(dǎo)致此提示該主機的指紋(也可能是指公鑰)已經(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:
這段提示用于提示你是否信任該主機(這里指服務(wù)器)绿店,如果輸入yes則信任該主機并且將該服務(wù)器的公鑰追加到 .ssh/known_hosts文件中。