ssh登錄 作用 在開發時,通常會用Terminal通過ssh登錄到每個伺服器里,打開伺服器終端,以進行開發,通常來說,一個伺服器會給出如下的幾個信息: host IP password 登錄伺服器 基本格式:ssh user@hostname user:用戶名 hostname:IP地址/功能變數名稱 如 ...
ssh登錄
作用
- 在開發時,通常會用Terminal通過ssh登錄到每個伺服器里,打開伺服器終端,以進行開發,通常來說,一個伺服器會給出如下的幾個信息:
host
IP
password
登錄伺服器
-
基本格式:
ssh user@hostname
- user:用戶名
- hostname:IP地址/功能變數名稱
-
如果是第一次登錄的時候,會有提示,輸入yes,輸入密碼,即可登錄,密碼輸入時不顯示。
- 輸入exit/ctrl+d/logout即可退出
- 當輸入yes時,會將伺服器信息存入ssh文件夾中的known_hosts文件(~/.ssh/known_hosts),再次登錄就無需驗證Yes
修改埠號
- 預設埠號為22,修改埠號的基本命令格式為:
ssh user@hostname -p 22
配置文件
- 通過配置文件的方式給伺服器賬號配置別名,用短字元串替代長字元串
# 在根目錄下有
~/.ssh/config
# 沒有的話可以創建一個名為config的文件
# 在其中編寫:
Host 別名
HostName IP地址/功能變數名稱
User 用戶名
port 預設情況下,如果不寫即為22
# 當有多個伺服器時,可以配置多個伺服器賬號,格式如下:
Host myserver1
...
Host myserver2
...
# 之後再使用伺服器時,可以直接使用別名myserver1、myserver2
免密登錄
# 創建密鑰
ssh-keygen
# 一直回車後,在~/.ssh中出現了兩個文件
id_rsa 密鑰
id_rsa.pub 公鑰
# 密鑰與公鑰是唯一配對的一對,生成之後,想要免密登錄到哪個伺服器,即將公鑰傳到哪個伺服器即可
cat id_rsa.pub
ctrl + insert
# 登錄到想要免密登錄的伺服器,在其中創建~/.ssh文件夾,創建新文件authorized_keys,將內容複製進去即可
mkdir ~/.ssh
cd ~/.ssh
vim authorized_keys
shift + insert
# 當有多個密鑰時需用空格隔開
# 也可以使用如下命令一鍵添加公鑰
ssh-copy-id 伺服器名稱
執行命令
- 當實現自動化運維時,需要執行一些基本的操作,通過使用執行命令,來讓伺服器執行一些基本的自動化格式命令
# 基本格式
ssh user@hostname command
ssh user@hostname ls -a
# 同樣的,執行命令可以執行一個for迴圈,ssh會將執行命令的標準輸出重定向到當前終端中
# 單引號中的$i可以求值,會被解析,在本地伺服器不會解析,傳過去的就是 $i
ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done'
# 雙引號中的$i不可以求值,不會被解析,因為在本地伺服器已經解析了
ssh myserver "for ((i = 0; i < 10; i ++ )) do echo $i; done"
# 補充講解
# 案例1
# 雙引號中的字元串命令會取到本地的值,單引號中的字元串命令不會取到本地的值,會原封不動的傳到伺服器端
name=aa
ssh myserver "echo $name" # 輸出aa,本地有name的值,傳過去的是echo aa
ssh myserver 'echo $name' # 輸出為空,伺服器端沒有name的值
ssh myserver 'echo \$name' # 輸出$name,轉義了不取值
# 案例2
ssh myserver 'for ((i=1;i<=10;i++)) do echo $i; done' # 伺服器輸出1-10,本地不解析
ssh myserver "for ((i=1;i<=10;i++)) do echo $i; done" # 輸出為空,本地解析但沒有定義i的值
ssh myserver "for ((i=1;i<=10;i++)) do echo \$i; done" # 伺服器輸出1-10,原封不動傳過去
# 總結
# 單引號中 $x 可以取得語句命令中的 x 值 – 如果使用雙引號的話可以加轉義
# 雙引號中 $x 可以取到語句命令外的 x 值
scp傳文件
- 實現不同文件之間傳文件
# 基本命令:將source路徑下的文件複製到destination中
scp source destination
# 同樣的一次可以複製多個文件
scp source1 source2 destination
複製文件夾
- 基本命令:
scp -r
-r
一定要放在source與destination前面- 對於某一個位置的地址,一般格式為:
myserver:
後面接的是相對於伺服器賬號的家目錄,可以是絕對路徑/相對路徑
scp -r ~/tmp myserver:/home/acs/
伺服器與伺服器之間進行文件傳輸
- 一般模式為:伺服器1->本地伺服器->伺服器2
- 兩個伺服器之間也可以進行直接傳輸,但是需要相互之間完整授權
scp複製的兩個方向
# 去:從本地家目錄下的tmp文件夾複製到myserver伺服器的/home/acs文件夾下
scp -r ~/tmp myserver:/home/acs
# 來:將伺服器的文件夾複製到本地的dir文件夾
scp -r myserver:/var/lib/locales/supported.d ./dir
scp指定伺服器埠號
# P大寫,且P放在source和destination之前
scp -P xx source destination
使用scp配置一個毛坯伺服器
# 配置一個毛坯伺服器,需要裝飾的東西,也就是vim與tmux
# 將.vimrc與.tmux.conf複製到伺服器對應的目錄下
# 位置在初始的Terminal中輸入ls -a即可找到
ssh .vimrc .tmux.conf myserver
scp ~/.vimrc ~/.tmux.conf myserver:
# tmux如果不生效則重新載入
tmux list-sessions
tmux kill-server
tmux
tmux source ~/.tmux.conf
習題
# 獲取ssh教程配套的遠程伺服器賬號的信息
homework 4 getinfo
User: acs_1245
HostName: 123.57.67
# 創建好作業後,先進入文件夾/home/acs/homework/lesson_4/,然後:
homework 4 create
cd /home/acs/homework/lesson_4/
(0) 進入homework_0文件夾,要求:
[1] 該文件夾內容為空
cd homework_0
rm * -r
[2] 配置伺服器賬號的密鑰登陸方式。伺服器信息可以通過如下命令獲得:
homework 4 getinfo
將伺服器賬號的名稱(Host)配置成:myserver
# 配置名稱
vim ~/.ssh/config
Host myserver
HostName IP地址或功能變數名稱
User 用戶名
# 密鑰登陸方式1
ssh-keygen
cat ~/.ssh/id_rsa.pub
ctrl+a z
set:nonu
ctrl+insert
ssh myserver
vim ~/.ssh/authorized_keys
:set paste
shift+insert
# 密鑰登錄方式2
ssh-copy-id myserver
(1) 進入homework_1文件夾,下列描述中的“本地”均表示當前文件夾。要求:
[1] 在myserver伺服器上創建並清空文件夾:~/homework/lesson_4/homework_1/
cd ../homework_1
ssh user@hostname
cd ~/homework/lesson_4/homework_1/
rm * -r
[2] 將本地的main.cpp文件上傳到myserver中的~/homework/lesson_4/homework_1/目錄中。
scp main.cpp myserver:~/homework/lesson_4/homework_1/
[3] 在本地創建文件夾dir。
mkdir dir
[4] 將myserver中的/etc/lsb-release文件複製到dir中。
scp -r myserver:/etc/lsb-release ./dir
(2) 進入homework_2文件夾,下列描述中的“本地”均表示當前文件夾,要求:
[1] 在myserver伺服器上創建並清空文件夾:~/homework/lesson_4/homework_2/
cd ../homework_2
ssh myserver
cd ~/homework/lesson_4/homework_2/
rm * -r
[2] 將本地的dir文件夾上傳到myserver中的~/homework/lesson_4/homework_2/目錄中。
scp -r ./dir myserver:~/homework/lesson_4/homework_2/
(3) 進入homework_3文件夾,下列描述中的“本地”均表示當前文件夾,要求:
[1] 在本地創建文件夾dir。
cd ../homework_3
mkdir dir
[2] 將myserver中的/var/lib/locales/supported.d文件夾下載到本地dir文件夾中。
scp -r myserver:/var/lib/locales/supported.d dir
(4) 進入homework_4文件夾,編寫腳本remote_mkdir.sh和remote_rmdir.sh,要求:
scp remote_mkdir.sh remote_rmdir.sh myserver:~/homework/lesson_4/homework_4/
# 並非傳輸文件過去執行,而是在本地執行這些命令
[1] 在myserver伺服器上創建並清空文件夾:~/homework/lesson_4/homework_4/
ssh myserver
mkdir ~/homework/lesson_4/homework_4/
cd ~/homework/lesson_4/homework_4/
rm * -r
[2] 本地目錄下僅包含remote_mkdir.sh和remote_rmdir.sh
cd ../homework_4
rm * -r
vim remote_mkdir.sh
vim remote_rmdir.sh
[3] remote_mkdir.sh和remote_rmdir.sh具有可執行許可權
chmod +x remote_mkdir.sh
chmod +x remote_rmdir.sh
[4] remote_mkdir.sh接收一個傳入參數。格式為 ./remote_mkdir.sh directory_name
該操作可以在myserver伺服器上的~/homework/lesson_4/homework_4/目錄下,創建一個名為directory_name的文件夾
# 單引號中 $x 可以取得語句命令中的 x 值 – 如果使用雙引號的話可以加轉義
# 雙引號中 $x 可以取到語句命令外的 x 值
vim remote_mkdir.sh
#! /bin/bash
# mkdir / -p 創建一系列的文件夾,-p有就跳過沒有就創建
ssh myserver "mkdir -p ~/homework/lesson_4/homework_4/\"$1\""
ssh myserver 'mkdir -p ~/homework/lesson_4/homework_4/$1'
[5] remote_rmdir.sh接收一個傳入傳輸。格式為 ./remote_rmdir.sh directory_name
該操作可以將myserver伺服器上的~/homework/lesson_4/homework_4/目錄下的名為directory_name的文件夾刪掉。
# 單引號中 $x 可以取得語句命令中的 x 值 – 如果使用雙引號的話可以加轉義
# 雙引號中 $x 可以取到語句命令外的 x 值
vim remote_rmdir.sh
#! /bin/bash
# rm * -r
ssh myserver "rm -r ~/homework/lesson_4/homework_4/\"$1\""
ssh myserver 'rm -r ~/homework/lesson_4/homework_4/$1'
[6] 註意:傳入的文件參數可能包含空格。兩個腳本均不需要判斷傳入參數的合法性。
# 可能包含空格,因此需要使用引號引上