**Соглашение: **Следующее используется для 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/
, для Win10C:\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 на узле интрасети,
Продолжение следует. . .