問題背景
由于跳板機不支持 ssh-copy-id
命令,為了配置免密登錄,考慮在服務器上手動使用 cat
命令寫入跳板機公鑰
cat <<EOL >> ~/.ssh/authorized_keys
[Your public key]
EOL
但卻出現了以下錯誤
-bash: /root/.ssh/authorized_keys: Read-only file system
解決方案
Read-only file system
錯誤是因為文件系統被掛載為只讀模式,使用 mount
命令查看相應目錄的情況
mount | grep /root/.ssh
# 輸出:tmpfs on /root/.ssh type tmpfs (ro,relatime)
可見 /root/.ssh
目錄被掛載為一個只讀的 tmpfs
(臨時文件系統),這是不常見的配置,可能是出于特定的安全考慮或者是臨時的安全措施。
考慮重新掛載
mount -o remount,rw /root/.ssh
重新寫入公鑰后發現的確能夠實現免密登錄了,但一段時間后又失效了。
執行命令 ls -lah /root/.ssh
返回以下結果
drwxr-xr-x 2 root root 100 Feb 20 16:27 ..2024_02_20_08_24_55.896542925
lrwxrwxrwx 1 root root 22 Feb 20 15:44 authorized_keys -> ..data/authorized_keys
lrwxrwxrwx 1 root root 31 Feb 20 16:24 ..data -> ..2024_02_20_08_24_55.896542925
lrwxrwxrwx 1 root root 13 Feb 20 15:44 id_rsa -> ..data/id_rsa
lrwxrwxrwx 1 root root 17 Feb 20 15:44 id_rsa.pub -> ..data/id_rsa.pub
說明 authorized_keys
實際上是一個軟鏈接,指向了一個帶有時間戳信息的目錄 ..2024_02_20_08_24_55.896542925
下的同名文件。所以即使修改這個軟鏈接,后續它還會指向新的同名文件。
一個暴力解決方法:首先進入到 .ssh
目錄下,然后 rm -rf *
,隨后用 cat
寫入公鑰即可。