有些人可能会发现这个问题非常奇特(而且很可能是不可能的):是否可以在我登录的同时以某种方式上传文件?就像是:
$ ssh --some-option /file/to/be/uploaded user@server
就像首先使用scp
上传文件,然后登录,但只提供一次密码。问题是,我总是必须这样做(不要问,只是不要......)
或者,有没有办法将几个 ssh-family 命令“捆绑”在一起,所以你只需要提供一次密码(我知道使用私钥/公钥——这不是我想要的)?
编辑 1
不完全重复:结果与以下内容(我必须使用)冲突:
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
如果我使用连接共享,它似乎会禁用 ssh-agent 所做的任何事情。有办法解决吗?
编辑 2
我做了以下修改:
$ cat .profile
...
function ssh
{
h=$1
/usr/bin/scp ~/mybashrc $h:.bashrc
/usr/bin/scp ~/.vimrc $h:.vimrc
/usr/bin/ssh $h
}
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
和:
$ cat ~/.ssh/config
...
Host *
ForwardAgent yes
User myuser
IdentityFile ~/.ssh/id_rsa
ControlPath ~/.ssh/S.%r@%h:%p
ControlMaster auto
ControlPersist yes
如果没有这些Control*
选项,我可以登录堡垒服务器,然后登录该网络中的其他服务器,但是当我添加选项时,我得到以下信息:
$ ssh rgs-gameiom
mybashrc 100% 177 18.0KB/s 00:00
.vimrc 100% 59 3.5KB/s 00:00
Last login: Thu Oct 3 08:35:38 2019 from 80.229.227.116
$ ssh db3
Permission denied (publickey).
SSHv2 支持连接多路复用——通过同一连接启动多个命令会话。激活它的几个现有线程:
不,它不会禁用任何东西。
然而,在连接共享激活的情况下,只有第一次调用——实际连接到服务器并提示输入凭据的调用——会注意你的 ssh-agent 的 $SSH_AUTH_SOCK。
如果需要,第一个连接仍将使用代理进行身份验证,如果启用,它将设置代理转发。
但是未来在同一连接上的“共享”会话仍然捎带原始客户端进程(仍在后台运行),这意味着它们将继续使用原始连接使用的相同ssh-agent——它们不会自动迁移到新的代理套接字。
因此,如果您以关闭终端后自动退出的方式启动 ssh-agent,则此多路复用连接将在此之后失去其“代理转发”。
为了避免这种情况,要么 a) 以更持久的方式启动 ssh-agent,也许让它使用固定的套接字位置,这样在完全相同的路径上重新启动会更容易,
或 b) 避免 ControlPersist 并在需要时手动启动“主”连接: