有些人可能会觉得这个问题很奇怪(而且很可能是不可能的):我登录时可以以某种方式上传文件吗?例如:
$ ssh --some-option /file/to/be/uploaded user@server
类似于先scp
上传文件,然后登录,但只输入一次密码。问题是,我总是必须这样做(不要问,只是不要......)
或者,有没有办法将几个 ssh 系列命令“捆绑”在一起,这样您只需输入一次密码(我知道使用私钥/公钥 - 这不是我想要的)?
编辑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).
答案1
SSHv2 支持连接多路复用 - 通过同一连接启动多个命令会话。有关激活它的几个现有线程:
- 如果禁止使用 SSH 密钥,则缓存密码
- 我可以在不重新认证的情况下启动新的 SSH 终端吗?
- ssh:保持通道开放以便快速复制
- 我如何才能运行“make”并从远程主机检索二进制文件而无需两次“ssh”?
如果我使用连接共享,它似乎会禁用 ssh-agent 所做的一切。有办法解决这个问题吗?
不,它不会禁用任何东西。
然而,在连接共享处于活动状态时,仅限第一次调用– 实际连接到服务器并提示输入凭证的那个 – 将注意你的 ssh-agent 的 $SSH_AUTH_SOCK。
如果需要,第一个连接仍将使用代理进行身份验证,并且如果启用,它将设置代理转发。
但未来通过同一连接进行的“共享”会话仍会继续进行原始客户端进程(仍在后台运行),这意味着他们将继续使用相同的原始连接使用的 ssh-agent – 它们不会自动迁移到新的代理套接字。
因此,如果您以在关闭终端后自动退出的方式启动 ssh-agent,则此多路复用连接将在此之后失去其“代理转发”。
为了避免这种情况,可以 a) 以更持久的方式启动 ssh-agent,并可能让它使用固定的套接字位置,以便更容易在完全相同的路径上重新启动,
eval $(ssh-agent -s -a ~/.ssh/agent-for-project-foo)
ssh-add
systemd-run --user --unit="ssh-agent" -- ssh-agent -D -a ~/.ssh/agent
export SSH_AUTH_SOCK=~/.ssh/agent
ssh-add
或者 b)避免使用 ControlPersist 并在需要时手动启动“主”连接:
eval $(ssh-agent -s)
ssh-add
ssh -fNM myserver # starts a background[-fN] master[-M] connection
scp somefile myserver:/tmp # transfers a file without asking for auth
ssh myserver # opens a shell session without asking for auth