Назад | Перейти на главную страницу

Конфигурация Unix Shell / SSH, позволяющая перенаправлять TCP-порт без отображения командной строки

Я использую Debian Linux. Я хотел бы иметь учетную запись пользователя, которая может подключаться через SSH для TCP-пересылки толькобез командной строки.

например, будет работать следующее (с удаленного компьютера):

ssh -D1234 user@myhost

но командная строка не появится.

Использование оболочки, такой как / bin / false или / sbin / nologin, слишком ограничительно, поскольку она даже не позволяет пользователю войти в систему. Оболочка, которая разрешает только команды «exit» или Ctrl + D, подойдет.

Я знаю, что нечто подобное можно разрешить только по SFTP, но я не могу найти эквивалент для пересылки TCP.

Спасибо

Похоже, вы ищете -N вариант:

-N      Do not execute a remote command.  This is useful 
        for just forwarding ports (protocol version 2 only).

Вот так:

ssh -D 8080 -N foo@bar.com

Также некоторый интерес может представлять -f вариант:

 -f      Requests ssh to go to background just before command execution.  
         This is useful if ssh is going to ask for passwords or passphrases, 
         but the user wants it in the background.  This implies -n. 
         The recommended way to start X11 programs at a remote site is 
         with something like ssh -f host xterm.

Если вы хотите ограничить входящие соединения, которые могут:

  • Настройте пользовательскую команду в своем authorized_keys файл (при условии, что вы используете ключи ssh)
  • Измените оболочку вашего пользователя

Какую команду / оболочку вы используете, зависит от того, что вы хотите разрешить. Например:

  • /bin/cat будет держать соединение открытым, но ничего не делать
  • rssh позволит вам настроить, какие действия доступны
  • Оболочка chroot, заключенная в тюрьму, обеспечивает аналогичную настраиваемость
  • bash может работать в ограниченном режиме (rbash), который позволяет запускать команды только в настроенном PATH. Это не надежно, но оно стоит больше, чем ничего.

Не уверен, подойдет ли это. У меня есть кластер, в котором я хочу, чтобы люди работали над интерфейсом, но это им не разрешено на вычислительных узлах. У всех людей есть учетные записи на всех компьютерах, однако узлы имеют следующие строки в /etc/profile:

if test "$TERM" != "linux" && test "$USER" != "root" ;then
  echo ""
  echo -e "\\033[0;34m=======================================================================\\033[0;39m"
  echo ""
  echo -e "\\033[0;31m         Login to this host is allowed for administrator only.\\033[0;39m"
  echo -e "            Please use \\033[0;34mqueue\\033[0;39m to submit your jobs instead"
  echo -e "    or \\033[0;34m132.187.71.6\\033[0;39m or  \\033[0;34m132.187.71.7\\033[0;39m to login into cluster front-end."
  echo ""
  echo -e "\\033[0;34m=======================================================================\\033[0;39m"
  echo ""
exit
fi

Часть с $TERM проверяет, был ли вход прямым (т.е. с участием ssh) или через систему очередей. Последний разрешен. Если вы хотите, чтобы конкретному пользователю было разрешено входить в систему, вы можете добавить в if-statment && test "$USER" != "someuser"