我想将本地对文件的更改同步到远程服务器,然后重新加载使用该文件的服务。例如:
# Sync file to remote server
rsync -avzhe ssh --rsync-path "sudo rsync" \
/etc/haproxy/haproxy.cfg [email protected]:/etc/haproxy/
# Reload remote service
ssh [email protected] "sudo /etc/init.d/haproxy reload"
这样做会强制我输入 SSH 用户的密码两次。有没有更好的方法,这样我可能只需要输入一次密码?
答案1
跑步ssh-keygen
:
ssh > ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): abc.key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in abc.key.
Your public key has been saved in abc.key.pub.
The key fingerprint is:
9e:e2:46:c0:9a:ac:fe:fb:ea:ec:ee:66:00:39:91:f8 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|.. |
|+ |
| + . |
|+ E o |
|.o o . S |
| .+ .. . |
| .. .. o |
|. .o ... |
|..OX+o. |
+-----------------+
这里我按 两次省略了密码Enter
。现在我有abc.key
和abc.key.pub
文件。让我们将它们设置为只有我可读:
chmod 600 abc.key*
打开abc.key.pub
:
ssh > cat abc.key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDppADcp53HZ4KF7EsNcfV1qM4WtuYEeHWjAXsFqJwHd7loyKYnORHtAMtd78+cSHTiAycLeNqX9xRh/lPlhifeovxJ8th6c4W7cXNWalmz6q+RkDE8ZznmcNSvrMToLm7oivdsBDiPIBbiOtunKRQ2TsNZ72RJuC3RlrmUakWp9RcrQMFAvyxkzJYmm4fTSozosA2/NaHn0qIm/5Ed9I5BQ9IzRQLgzsXCtBTQY83aBcYLk+AzhQiM45AV1mOGzYAkgXu6Uo3P9jDxi2DE1priW8SnKEXhrTEmNDAZDkDRAz1Go/lGnENslqLZ0URs5spGtHGhcWt9DmSjVGbbGvpP [email protected]
复制整行并将其粘贴到/home/user/.ssh/authorized_keys
远程主机上。
现在尝试:
ssh -i /path/abc.key [email protected]
是的,现在您无需键盘验证即可登录。您可以在任何使用过的地方使用该技巧ssh
。
答案2
您可以使用控制大师,控制路径和控制持续ssh 选项可利用 ssh 连接共享功能。使用这些选项可使 ssh 保持连接指定的秒数(或永远保持为 0),并且任何后续 ssh 会话都将连接而无需身份验证,因为它们将使用已建立的连接。
例子:
将其放入 .ssh/config
Host *
ControlMaster auto
ControlPath /tmp/ssh_shared_%h_%p_%r
ControlPersist 60
这将保持连接 60 秒。在此期间,系统不会要求您输入密码。