ssh免密登陸服務器和scp的使用

TL;DR

  • 本地登陸服務器 ssh user@remote -p port,端口是22的話ssh user@remote,退出登陸exit
  • 本地免密碼登陸 ssh-copy-id user@remote -p port,這在寫腳本服務器控制時特別有用
  • 給服務器配置別名 code ~/.ssh/config追加一些內容,就能夠ssh selfname登陸,再也不須要記服務器ip地址了
  • 執行命令ssh selfname "cd ~;ls",將會在服務器上執行引號裏的命令,執行以後其自動關閉遠程服務
  • 將a電腦文件(夾)複製到b電腦上哪一個文件夾下面:scp username@a電腦ip:文件路徑 username@b電腦ip:文件夾路徑,是文件夾的話加上-r,這裏也能夠用別名,一般本機的話省略username@a電腦ip:
  • 大段引用ssh的基本加高級用法

基礎

SSH是一種網絡協議,用於計算機之間的加密登陸。原理:html

  • 遠程主機收到用戶的登陸請求,把本身的公鑰發給用戶。
  • 用戶使用這個公鑰,將登陸密碼加密後,發送回來。
  • 遠程主機用本身的私鑰,解密登陸密碼,若是密碼正確,就贊成用戶登陸。

當遠程主機的公鑰被接受之後,它就會被保存在本地文件~/.ssh/known_hosts之中,此外系統也有一個這樣的文件,一般是/etc/ssh/ssh_known_hosts,保存一些對全部用戶均可信賴的遠程主機的公鑰。前端

基本命令:node

ssh user@remote -p port

# user 是你在遠程機器上的用戶名,若是不指定的話默認爲當前用戶
# remote 是遠程機器的地址,能夠是 IP,域名,或者是後面會提到的別名
# port 是 SSH Server 監聽的端口,若是不指定的話就爲默認值 22
# 好比我經常使用的 ssh zhm@120.79.52.223
複製代碼

一般在本地電腦輸入以上命令以後,遠程服務器就會詢問密碼,你輸入的時候是看不見任何波動,輸入完回車就能夠了~,若是報錯ssh: connect to host remote port 22: Connection refused,說明服務器沒有按照ssh server,Ubantu Desktop系統默認是沒有這個的,安裝命令sudo apt-get install openssh-serverlinux

免密碼登陸

每次 ssh 都要輸入密碼是否是很煩呢?與密碼驗證相對的,是公鑰驗證。也就是說,要實現免密碼登入,首先要設置 SSH 鑰匙。也就是本地電腦生成公鑰私鑰,而後把公鑰放在遠程服務器上就能夠了! 原理很簡單,就是用戶將本身的公鑰儲存在遠程主機上。登陸的時候,遠程主機會向用戶發送一段隨機字符串,用戶用本身的私鑰加密後,再發回來。遠程主機用事先儲存的公鑰進行解密,若是成功,就證實用戶是可信的,直接容許登陸shell,再也不要求密碼。git

# 查看本地有沒有
ls ~/.ssh
# 沒有就生成
ssh-keygen
# 在~/.ssh/目錄下,會新生成兩個文件:id_rsa.pub和id_rsa。前者是你的公鑰,後者是你的私鑰。
# 把公鑰放到遠程服務器
ssh-copy-id user@remote -p port
# 好比個人 ssh-copy-id zhm@120.79.52.223
複製代碼

ssh-copy-id基本都安裝了,萬一沒有,mac上brew install ssh-copy-id。 windows麻煩點ssh user@remote -p port 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub,意思是在遠端執行新建 .ssh 文件夾,並把本地的 ~/.ssh/id_rsa.pub (也就是公鑰)追加到遠端的 .ssh/authorized_keys 中。固然,不使用這條命令的話,你也能夠手動操做這個過程,即先複製公鑰,再登入遠程機器,粘貼到 .ssh/authorized_keys 當中。shell

配置別名

每次都輸入 ssh user@remote -p port,時間久了也會以爲很麻煩,特別是當 user, remote 和 port 都得輸入,並且還很差記憶的時候。配置別名可讓咱們進一步偷懶。好比我想用ssh lab替換上面一串windows

# cat>>某文件<<EOF追加下內容, >> 追加的意思 <<EOF 遇到EOF終止
# 由於是前端,直接用vscode編輯
code ~/.ssh/config
# 追加如下內容,保存
Host lab
    HostName remote
    User user
    Port port

# 來登陸吧
ssh lab

# 好比個人
# Host han
    # HostName 120.79.52.223
    # User zhm
    # Port 22
# ssh han
複製代碼

命令行執行登陸而且在目標服務器上執行命令

命令行執行登陸而且在目標服務器上執行命令:bash

# 單引號或者雙引號,將命令包起來,而後分號隔開命令
ssh user@remoteNode "cd /home ; ls"
複製代碼

若是是不少命令的話,須要建一個腳本。服務器

# 建一個腳本文件test.sh,裏面寫上這個,而後執行 sh test.sh
#!/bin/bash 
# 遠程執行的內容在"< < remotessh " 至" remotessh "之間,若是不想本機出現日誌的話 ssh user@remoteNode >/dev/null 2>&1 << remotessh
ssh user@remoteNode << remotessh
ls
exit
remotessh
複製代碼

啊,寫腳本就容易了,有木有!網絡

傳輸文件

兩臺機器間文件傳輸能夠用scp,它的地址格式與 ssh 基本相同,都是能夠省略用戶名和端口,稍微的差異在與指定端口時用的是大寫的 -P 而不是小寫的。不過,若是你已經配置了別名,那麼這都不重要,由於 scp 也支持直接用別名

# 總的:本機的能夠省略電腦的ip,默認的遠程當前文件夾是 Home目錄(~),將A電腦上的文件複製到B電腦上
# 注意的地方:A如果文件,B電腦若也是文件的路徑,無論文件存不存在,都會將A文件內容寫入到B這個文件。
# B電腦如果文件夾,無論文件夾存不存在,都會在這個文件夾下生成A電腦同名的文件和內容,有的話則會覆蓋同名文件
# A如果文件夾,加上-r,B電腦如果文件的路徑會報錯,B電腦如果文件夾路徑,文件夾不存在的話則會創建這個文件夾且放入A文件夾裏面的內容(至關於將A文件夾挪過去而後重命名),文件夾存在的話,會在這個文件夾下面生成一個和A同名的文件夾,裏面內容一致
scp A電腦:文件路徑 B電腦:文件路徑

# 把本地的 /path/to/local/file 文件傳輸到遠程的 /path/to/remote/file 
scp -P port /path/to/local/file user@remote:/path/to/remote/file

# 也可使用別名
scp /path/to/local/file lab:/path/to/remote/file

# 把遠程的 /path/to/remote/file 下載到本地的 /path/to/local/file
scp lab:/path/to/remote/file /path/to/local/file

# 遠程的默認路徑是家目錄
# 下面命令把當前目錄下的 file 傳到遠程的 ~/dir/file
scp file lab:dir/file

# 加上 -r 命令能夠傳送文件夾
# 下面命令能夠把當前目錄下的 dir 文件夾傳到遠程的家目錄下
scp -r dir lab:

# 別忘了 . 能夠用來指代當前目錄
# 下面命令能夠把遠程的 ~/dir 目錄下載到當前目錄裏面
scp -r lab:dir/ .
複製代碼

若是以爲使用命令行傳輸文件渾身不自在,你還可使用 SFTP 協議。任何支持 SFTP 協議的客戶端都能用你的 SSH 帳號信息登入並管理文件,好比開源的有圖形化界面的FTP客戶端 FileZilla。別忘了,在這些客戶端裏面,你也能夠指定你的私鑰(~/.ssh/id_rsa),而後就能作到無密碼登入了。

保持程序在後臺運行

如下命令均在服務器執行

nohup

# 讓程序在後臺運行 好比 nohup node index.js &
nohup 一直執行的命令 &
# 看下任務號 node的那個
ps
# 若是須要終止的話
kill 21455
複製代碼

tmux

tmux更能執行復雜的程序,tmux還能管理多個窗口,窗口切分,複製粘貼等等mac用戶使用tmux更方便,新建會話tmux -CC,恢復的時候tmux -CC attach

# 服務器上安裝tmux
sudo apt-get install tmux

# 運行tmux,進入會話,此時運行任何東西都不會由於退出ssh而被殺死
tmux

# 暫時離開會話 ctrl+b 再按下d

# 恢復會話
# tmux attach

# tmux命令必須運行在服務器上
複製代碼

阮一峯大神的ssh介紹
ssh的基本加高級用法
linux中的shell用ssh自動登陸遠程服務器後執行命令並自動
ssh轉發

相關文章
相關標籤/搜索