在使用 ssh 登录时上传文件吗?

在使用 ssh 登录时上传文件吗?

有些人可能会觉得这个问题很奇怪(而且很可能是不可能的):我登录时可以以某种方式上传文件吗?例如:

$ 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-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

相关内容