ssh上的Portainer端点



我有一个带有docker容器的服务器,并且只能通过ssh访问它

我无法通过http等连接到它。

我无法添加更多可用的网络端口,除了22(并且22已经被ssh占用(。

我有portainer,在我的本地电脑上运行。

所以。有没有一种方法可以在portaler中添加端点,通过ssh使用这些服务器容器?

如果您被允许转发连接,您可以通过ssh将本地套接字连接转发到远程服务器,然后运行portainer本地绑定装载该套接字:

ssh -n -N -T -L ${PWD}/docker.sock:/var/run/docker.sock user@host &
docker run -d 
-p 8000:8000 
-p 9000:9000 
--name=portainer 
--restart=always 
-v ${PWD}/docker.sock:/var/run/docker.sock 
-v portainer_data:/data 
portainer/portainer-ce

我也在寻找解决方案,解决方案massyb可以通过以下几种方式扩展以实现持久性:

  1. 自动刷新
  2. systemd服务文件
  3. 从本地docker容器运行ssh——不确定这个,我对docker还很陌生

您可以在portaler web界面中添加环境,而不是直接启动portaler(Environments->create environment(。这在很大程度上是这些方法的要求

EDIT:Portaliner需要用端口转发或--network host启动,这样它才能看到暴露的端口,或者用-v /var/run/docker-$${HOST}.sock:/var/run/docker-$${HOST}.sock启动,这样才能看到unix套接字。

Autosh是一种直接的方法,只需将ssh替换为autossh即可。

用于systemd:这是一个我用于创建反向隧道的单元文件,但它可以很容易地针对本地进行调整->通过将-R更改为-L(并可选择更改描述(进行远程隧道传输:

[Unit]
Description=A reverse tunnel using ssh for %I (format remote port:host:local port, connect to host forward remote port to local port)
Wants=network-online.target
After=network-online.target
StartLimitIntervalSec=0

[Service]
ExecStart=/usr/bin/bash -c 'URI=%i; REMOTE_PORT=$${URI%%%%:*}; LOCAL_PORT=$${URI##*:}; HOST=$${URI%:*}; HOST=$${HOST#*:}; /usr/bin/ssh -qNnT -o ServerAliveInterval=30  -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /etc/rtunnel/$${HOST}.id_rsa -R $$REMOTE_PORT:localhost:$$LOCAL_PORT sshdummy@$$HOST'
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

设置:

  1. 另存为/lib/systemd/system/rtunnel@.service在本地主机上
  2. 根据需要调整参数(将-R更改为-L用于本地端口转发>远程端口转发(
  3. 在服务器上创建一个单独的用户(我的用户名为sshdemy(
  4. 在localhost上创建一个无密码ssh密钥对,将私钥保存在/etc/rtunnel/${host}.id_rsa中,并将public id复制到sshdummy@host:~/.ssh/authorized_keys
  5. 在主机上运行sudo systemctl enable --now rtunnel@10022:myhost:22(这将创建一个从myhost:10022到localhost:22的持久隧道(
  • 可选用于3.:将用户的登录shell设置为/bin/cat(用于额外的安全性(
  • 可选用于3.:在/etc/ssh/sshd_config中为用户添加规则,以便也设置ClientAliveInterval和ClientAliveCountMax值:
Match User sshdummy
ClientAliveInterval 15
ClientAliveCountMax 3

ssh和systemd选项的解释:

StartLimitIntervalSec=0阻止systemd在 X秒后无法启动时终止服务

Restart=always确保服务总是在RestartSec=60秒后重新启动

-o ExitOnForwardFailure=yes确保ssh退出,从而在无法设置隧道时重新启动服务

-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no忽略主机密钥验证失败

-i /etc/rtunnel/$${HOST}.id_rsa为每个要连接到的主机使用一个单独的ssh密钥

最新更新