Несколько методов использования SSH для удаленного доступа [включая подробные шаги и меры предосторожности для проникновения в интрасеть]

**Соглашение: **Следующее используется для local$представления локального хоста и remote_{数字}$удаленного хоста.Числа используются для различения разных удаленных хостов.Локальный хост может быть Linux или Windows, но здесь предполагается, что удаленный хост только Linux .

1. Вход без пароля

id_rsaШаг 1: Подтвердите, были ли id_rsa.pubэти два файла сгенерированы локально . Если эти два файла есть, перейдите к шагу 3;

примечание: вид ubuntu /home/{UserName}/.ssh/; путь просмотра Win10 — C:\Users\{UserName}\.ssh.

ssh-keygen -t rsa -C "{备注}"Шаг 2: Запустите сгенерированный id_rsaи id_rsa.pubэти два файла в PowerShell ;

примечание: Адрес хранилища по умолчанию: для ubuntu /home/{UserName}/.ssh/, для Win10 C:\Users\{UserName}\.ssh.

Шаг 3: Добавьте id_rsa.pubсодержимое в /home/{remote_username}/.ssh/authorized_keysконец файла на удаленном хосте;

  • Локальный хост — ubuntu, и вы можете запустить:
local$ ssh-copy-id user@remote_ip
  • Локальный хост является общим для ubuntu и win10:
# win10 在PowerShell中运行  ubuntu 在终端中运行
local$ scp .ssh/id_rsa.pub user@remote_id:/home/{
    
    remote_UserNmae}/.ssh/key_temp
local$ ssh user@remote_ip 'mkdir -p .ssh && cat .ssh/key_temp >> .ssh/authorized_keys && rm .ssh/key_temp'

Первая строка команды выше — id_rsa_pubскопировать локальный хост .sshв каталог удаленного хоста на локальном хосте и переименовать его в key_temp;
вторая строка выше — удаленный доступ к удаленному хосту через SSH на локальном хосте (вы также необходимо ввести пароль в это время) и используйте catкоманду key_tempчтобы добавить содержимое в конец файла authorized_keys, то есть добавить открытый ключ локального хоста в файл authorized_keys удаленный узел. После добавления удалите временный файл key_temp.

После операции мы выполняем следующую команду, и нам больше не нужно вводить логин-пароль удаленного хоста для удаленного доступа к хосту.

local$ ssh user@remote_id

Я надеюсь, что кто-то с большими навыками запишет описанные выше шаги в bat или сценарий оболочки для развертывания одним щелчком мыши.

Два, настроить псевдонимы

Необходимо вводить каждый логин ssh ssh user@remote_id. Со временем мы можем легко забыть IP-адрес удаленного хоста. Настройка псевдонима позволяет нам использовать легко запоминающееся семантическое имя (например, remote_name) для связи с удаленным хостом и мы можем ssh {remote_name}получить к нему прямой доступ.

Host remote_name # 将remote_name替换成你觉得很容易与该远程主机关联的语义名称
	HostName remote_ip
	User remote_UserName
	Port port # 这一行可以不填,不填默认为22
	IdentityFile {
    
    本机存储私钥的地址,最好用绝对地址}/id_rsa # 这一行可以不用, vs code配置ssh远程无密访问是加了这一行的

3. Обратный туннель для обеспечения проникновения в интрасеть

20.04.2023 Дополнение: перед использованием обратного туннеля ssh я пытался использовать frp , но безуспешно. Только что я снова запустил frp и обнаружил, что он работает. Это все еще может быть связано с корнем. Можно под суперпользователем root. Если вы хотите избавить себя от проблем, довольно просто использовать frp напрямую.

3.1 Несколько комбинаций общего доступа по ssh

Предположим, у нас есть два хоста A (общедоступная сеть) и B (внутренняя сеть), основная информация представлена ​​в следующей таблице:

Имя процессора IP корень Обычный пользователь
А IP_A корень пользователь_А
Б IP_B корень пользователь_B

С помощью обычного ssh B может получить доступ к A, A не может получить доступ к B, а доступ к A можно получить через B с помощью следующей команды:

user_B$ ssh user_A@IP_A # B主机上的普通用户user_B访问A主机上的普通用户user_A

или

user_B$ ssh root@IP_A # B主机上的普通用户user_B访问A主机上的超级用户root

или

root@B$ ssh user_A@IP_A # B主机上的超级用户root访问A主机上的普通用户user_A

или

root@B$ ssh root@IP_A # B主机上的超级用户root访问A主机上的超级用户root

примечание. Разрешение доступа по ssh для суперпользователя на хосте должно /etc/ssh/sshd_configбыть PermitRootLoginустановлено на yes. Дополнительные сведения см. в разделах Включение корневой учетной записи Ubuntu, Включение входа с паролем и Включение входа с ключом .

ssh IPПоследствия 3.2 - ключ к успеху

user_B$ ssh IP_A

Эквивалентно:

user_B$ ssh user_B@IP_A 

Вы видели это? Это ОШИБКА. Когда на хосте А нет пользователя с таким же именем, как user_B, эта строка команды не может успешно выполнить ssh.

ssh IP_AЕсли root активирован на хосте A и хосте B и установлен соответствующий файл конфигурации ssh, то можно войти в качестве пользователя root на хосте B, и в конечном итоге он подключится к суперпользователю root хоста A.

root@B$ ssh IP_A

Эквивалентно:

root@B$ ssh root@IP_A

Чтобы активировать root, введите следующую команду в обычном пользовательском терминале, следуйте инструкциям и дважды введите пароль root, который необходимо установить, чтобы завершить активацию суперпользователя root:

sudo passwd root

Это причина, по которой у меня не получается проникнуть в интранет, о которой я расскажу позже. Сначала запомните этот BUG.

3.3 Официально начать проникновение во внутреннюю сеть

помещение:

  • Хост с IP-адресом общедоступной сети активировал суперпользователя root;
  • Внутренний хост для проникновения во внутреннюю сеть активировал суперпользователя root;
  • Два хоста генерируют ssh-ключи под суперпользователем и устанавливают вход без пароля (см. первый раздел);
  • Следующие поля для обоих хостов /etc/ssh/sshd_configзадаются следующим образом:
PermitRootLogin yes
GatewayPorts yes

После настройки перезапустите sshd:

systemctl restart sshd

3.3.1 Под пользовательским терминалом root хоста A в общедоступной сети откройте порт port_x

Дополнительные инструкции см. в Linux для просмотра состояния брандмауэра и открытых портов .

3.3.2 Выполните на корневом пользовательском терминале внутреннего хоста B, чтобы проникнуть во внутреннюю сеть:

ssh -fCNR port_x:localhost:22 root@IP_A

3.3.3 Выполнить на любом хосте C, имеющем доступ к общедоступной сети (без ограничений для пользователя):

ssh -p port_x root@IP_A

Если вы вводите пользователя root внутреннего хоста B, это означает, что внутреннее проникновение прошло успешно.

Если вы потерпите неудачу, вернитесь и проверьте, соответствуют ли ваши шаги этому блогу, и не торопитесь.

Четыре, обратный туннель ssh для доступа к внешней сети для ноутбука Jupyter в интрасети.

Обратитесь к ubuntu, чтобы установить jupyter и настроить удаленный доступ , или откройте jupyter в Ubuntu, чтобы удаленно открыть удаленный доступ к juyter.

Доступ в той же локальной сети для проверки правильности настроек.

Сначала запустите Jupyter Notebook на хосте интрасети, а затем запустите:

ssh -fCNR relay_port:localhost:jupyter_port root@IP_A

Выше показан relay_portпорт, используемый для переадресации блокнота Jupyter в интрасети на хост общедоступной сети A, который jupyter_portявляется портом ноутбука Jupyter в интрасети.

После завершения мы можем войти в браузер на любом компьютере, который может получить доступ к общедоступному сетевому узлу A, https:IP_A:relay_portчтобы получить доступ к блокноту Jupyter на узле интрасети,


Продолжение следует. . .

Guess you like

Origin blog.csdn.net/u013468614/article/details/130147783