Mac OS利用ssh訪問ubuntu虛擬機器及雲端操作
1、橋接模式
將該虛擬機器的網口設定成橋接模式(Bridged Adapter),以確保主機可以ping通虛擬機器:
2、安裝ssh
在ubuntu虛擬機器上安裝ssh server:
sudo apt-get install openssh-server
安裝結束後,確認本機ssh服務是否開啟,輸入
ps -e | grep ssh
如果看到sshd說明ssh服務已經打開了,如果沒有sshd,可以輸入以下命令開啟ssh服務:
sudo /etc/init.d/ssh start
3、IP地址
找到ubuntu的IP地址,即可以通過在terminal輸入:
ifconfig
會出現下面的東西:
找到擁有inet的那一行,後面的地址即為該虛擬機器的IP地址。這裡可以看到,該虛擬機器的IP地址為10.66.182.88
4、連線
在主機上同樣安裝ssh。安裝好後為了連線虛擬機器,可以進行如下操作:
wubijiadeMacBook-Pro:~ wooka$ ssh [email protected]
The authenticity of host '10.66.182.88 (10.66.182.88)' can't be established.
ECDSA key fingerprint is SHA256:xxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.66.182.88' (ECDSA) to the list of known hosts.
[email protected]'s password:
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-31-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Thu Oct 25 22:23:38 HKT 2018
System load: 0.0 Processes: 109
Usage of /: 17.3% of 8.50GB Users logged in: 1
Memory usage: 6% IP address for eth0: 10.66.182.88
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
New release '16.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Thu Oct 25 22:23:38 2018 from localhost
[email protected]:~$ ls
這裡ssh [email protected]
,wu
為虛擬機器的使用者名稱。
至此可以直接從主機訪問虛擬機器的檔案了。通過輸入exit
可退出訪問。
[email protected]:~$ exit
logout
Connection to 10.66.182.88 closed.
5、免密配置
然而,麻煩的是,每次主機訪問虛擬機器時都要輸入密碼。如何進行免密操作?
為主機和虛擬機器共同建立一個共享的密碼。
即,可輸入ssh-keygen
,產生一個public/private密碼對。
wubijiadeMacBook-Pro:~ wooka$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/wooka/.ssh/id_rsa): y
# 下面一行代表可否用另一個密碼代替之前需要輸入的密碼,為了方便,可以省略直接回車。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in y.
Your public key has been saved in y.pub.
The key fingerprint is:
SHA256:xxx
[email protected]
The key's randomart image is:
+---[RSA 2048]----+
|.o . o.. .o |
|. + o..... o |
|o..o .o.o.+ |
|=o..+Eo+oo . + |
|o+.oooooS = . |
|..o.. .o . o o |
| o o. . o o |
|. . .o . o |
| . .+ . |
+----[SHA256]-----+
現在,我們將pubilc key推送到虛擬機器上,即
ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/wooka/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
現在,你控制ubuntu虛擬機器的時候,就不需要輸入密碼了哦!
6、檔案雲端執行
假如我在主機端 (如 Macbook) 上寫程式碼. 在我的主目錄下寫好了一個 Python 指令碼 test.py
,但我想把該指令碼用 ssh 遠端推送到旁邊空閒的 Linux 去運算。
比如這個 Python 指令碼是這樣的:
import platform
a = 0
for i in range(999):
a += 1
print("Finish job, result = %i" %a)
print("This is", platform.system())
如果我要在虛擬機器上執行的話,可以這樣:
wubijiadeMacBook-Pro:~ wooka$ ssh [email protected] python3 < ~/test.py
Finish job, result = 999
This is Linux
可以看到,檔案被推送到了linux上運行了。command中的<
表示將右邊的檔案送入左邊的python3中
7、檔案雲端傳輸
之前只是檔案傳送到虛擬機器上執行,但是現在我要將檔案傳送到虛擬機器裡怎麼辦呢?比如說我要執行一個py檔案,但是該py檔案依賴於另一個py檔案。這樣的話,我必須要把兩個檔案都放在虛擬機器下才能執行。
比如檔案 a.py:
# This is b.py
def inner_func():
print("This is the function in b")
還有一個檔案需要呼叫a.py才能執行:
# This is a.py
from b import inner_func
inner_func()
答案是,在本地主機上輸入scp
(secure copy),加密傳輸複製~/{a,b}.py,就可將我的主目錄裡的兩個檔案複製到虛擬機器的temp的目錄中。
wubijiadeMacBook-Pro:~ wooka$ scp ~/{a,b}.py [email protected]:~/temp
a.py 100% 53 65.4KB/s 00:00
b.py 100% 69 89.5KB/s 00:00
接下來,執行虛擬機器上被傳送的檔案。這時候,相當於在ssh的時候傳送一條指令去執行a.py
,這條指令用" "
框起來,說明是要傳送去雲端再執行的指令。
wubijiadeMacBook-Pro:~ wooka$ ssh [email protected] "python3 ~/temp/a.py"
This is the function in b
接下來,對於雲端虛擬機器上產生的結果,我們要返回到本機中怎麼辦?其實,只要把scp
的兩個引數改變一下位置就可以了。
wubijiadeMacBook-Pro:~ wooka$ scp [email protected]:~/temp/a.py ~/Desktop/
a.py 100% 53 72.8KB/s 00:00
Reference:
- https://www.youtube.com/watch?v=SST5xl4SVA8&index=14&list=PLXO45tsB95cIiLTNZu-v3Y-xotBAjtH2x