1. 程式人生 > >Mac OS利用ssh訪問ubuntu虛擬機器及雲端操作

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:

  1. https://www.youtube.com/watch?v=SST5xl4SVA8&index=14&list=PLXO45tsB95cIiLTNZu-v3Y-xotBAjtH2x