文章目錄
- Linux SCP傳輸文件免密配置
- 生成SSH密鑰對
- 將公鑰復制到遠程服務器
- 測試SSH連接
- 使用SCP免密傳輸文件
- 可選配置
- 帶密碼的秘鑰連接處理
- 使用 `ssh-agent`進行緩存管理(該方式只能確保同一個回話中,多次傳輸只輸一次密碼)
- 使用 `keychain`(長期緩存 `passphrase`)
- 注意事項
Linux SCP傳輸文件免密配置
要在Linux系統之間使用SCP傳輸文件而不需要每次輸入密碼,可以通過SSH密鑰認證來實現。以下是配置步驟:
生成SSH密鑰對
秘鑰默認存儲/生成目錄位置在家目錄
~/.ssh
下
在本地機器上執行:
rsa
算法加密
ssh-keygen -t rsa -b 4096 -C "$(whoami)@$(hostname)-$(date +%Y%m%d)"
- 或
ed25519
算法加密
ssh-keygen -t ed25519 -C "$(whoami)@$(hostname)-$(date +%Y%m%d)"
按提示操作(可以直接按回車使用默認設置,不設置密碼短語
以實現完全免密)。
將公鑰復制到遠程服務器
方法一:使用ssh-copy-id
命令(最簡單)
ssh-copy-id username@remote_host
方法二:手動復制(如果沒有ssh-copy-id命令)
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
測試SSH連接
ssh username@remote_host
如果配置正確,應該可以直接登錄而不需要輸入密碼。
使用SCP免密傳輸文件
現在可以使用SCP命令而不需要輸入密碼:
# 上傳文件到遠程服務器
scp local_file username@remote_host:remote_directory# 從遠程服務器下載文件
scp username@remote_host:remote_file local_directory
可選配置
- 在
~/.ssh/config
中配置別名
編輯或創建~/.ssh/config
文件(可配置多個連接):
Host myserver1HostName remote_hostUser username # 連接的用戶賬號IdentityFile ~/.ssh/id_rsa # 本機的私鑰
Host myserver2HostName remote_host·User username1Port 22 # 默認是22,如果不是需要配置Port參數IdentityFile ~/.ssh/other_id_rsa # 附件
然后可以使用簡化的命令:
scp local_file myserver:remote_directory
- 禁用遠程服務器的密碼認證(增強安全性)
在遠程服務器的/etc/ssh/sshd_config中設置:
PasswordAuthentication no
然后重啟SSH服務:
sudo systemctl restart sshd
帶密碼的秘鑰連接處理
使用 ssh-agent
進行緩存管理(該方式只能確保同一個回話中,多次傳輸只輸一次密碼)
如果你想避免每次都輸入密鑰的密碼,你可以使用 ssh-agent
來緩存密鑰的密碼。這樣,你只需要在第一次使用時輸入密碼,之后 ssh-agent
會自動處理密碼。
使用 ssh-agent
來緩存密鑰密碼:
- 啟動
ssh-agent
:
在命令行中執行以下命令來啟動 ssh-agent:
eval "$(ssh-agent -s)"
該命令會啟動 ssh-agent
進程并設置一些環境變量。
- 添加私鑰到
ssh-agent
:
使用 ssh-add
命令將你的私鑰添加到 ssh-agen
。如果你使用的是 id_ed25519
作為私鑰,可以執行:
ssh-add ~/.ssh/id_ed25519
然后,它會提示你輸入密鑰的密碼一次。輸入后,ssh-agent 會記住這個密碼,并在你之后使用密鑰時自動提供。
- 驗證是否成功:
你可以通過以下命令確認密鑰是否已經被加載到ssh-agent
:
ssh-add -l
如果成功,你應該看到已加載的密鑰信息。
- 使用 ssh-agent 配合 ssh-copy-id:
如果你已經將密鑰添加到 ssh-agent 中,那么在以后使用 ssh 或 ssh-copy-id 連接遠程服務器時,就不需要再次輸入密鑰密碼了。
- 自動啟動 ssh-agent(可選):
為了避免每次打開終端時手動啟動 ssh-agent,你可以將啟動命令添加到你的 shell 配置文件中(例如 .bashrc 或 .zshrc)。
# Add this to ~/.bashrc or ~/.zshrc
eval "$(ssh-agent -s)"
然后,重新加載配置文件:
source ~/.bashrc # 或者 source ~/.zshrc
使用 keychain
(長期緩存 passphrase
)
keychain
可以跨終端會話緩存 passphrase
,適合長期免密登錄。
- 安裝 keychain
sudo apt install keychain # Debian/Ubuntu
sudo yum install keychain # CentOS/RHEL
- 配置
~/.bashrc
或~/.zshrc
eval "$(keychain --eval --agents ssh id_ed25519)"
下次登錄時會要求輸入一次 passphrase,之后所有終端會話均可免密使用。
注意事項
-
確保遠程服務器的
.ssh
目錄權限為700
,authorized_keys
文件權限為600
-
如果使用非標準SSH端口,SCP命令需要指定端口:
scp -P port_number ...
-
出于安全考慮,生產環境中建議為密鑰設置密碼短語,然后使用
ssh-agent
管理密鑰