TL;DR
- Вход на сервер локально
ssh user@remote -p port
, если порт 22ssh user@remote
,выходexit
- Локальный вход без пароля
ssh-copy-id user@remote -p port
, что особенно полезно при написании сценариев серверных элементов управления. - Настройте псевдоним для сервера
code ~/.ssh/config
добавить немного контентаssh selfname
Войдите в систему, больше не нужно запоминать IP-адрес сервера - Выполнение заказа
ssh selfname "cd ~;ls"
, команда в кавычках будет выполнена на сервере, после чего автоматически отключит удаленный сервис - Скопируйте файл (папку) компьютера a в какую папку на компьютере b:
scp username@a电脑ip:文件路径 username@b电脑ip:文件夹路径
, если это папка, добавьте-r
, здесь также могут использоваться псевдонимы, которые обычно не используются на локальной машине.username@a电脑ip:
- ЦитированиеБазовое и расширенное использование ssh
База
SSH — это сетевой протокол, используемый для зашифрованного входа между компьютерами. принцип:
- Удаленный хост получает запрос пользователя на вход в систему и отправляет пользователю свой собственный открытый ключ.
- Пользователь использует этот открытый ключ для шифрования пароля входа и отправки его обратно.
- Удаленный хост использует свой собственный закрытый ключ для расшифровки пароля для входа.Если пароль правильный, пользователю разрешается войти в систему.
Когда открытый ключ удаленного хоста принимается, он сохраняется в локальном файле.~/.ssh/known_hosts
Кроме того, в системе тоже есть такой файл, обычно/etc/ssh/ssh_known_hosts
, содержит открытый ключ некоторого удаленного хоста, которому доверяют все пользователи.
Основные команды:
ssh user@remote -p port
# user 是你在远程机器上的用户名,如果不指定的话默认为当前用户
# remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名
# port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22
# 比如我常用的 ssh zhm@120.79.52.223
Обычно после ввода вышеуказанной команды на локальном компьютере удаленный сервер запрашивает пароль.Вы не видите никаких колебаний при вводе.Просто нажмите Enter после ввода~, если сообщается об ошибкеssh: connect to host remote port 22: Connection refused
, что указывает на то, что сервер не следует за сервером ssh, система Ubantu Desktop не имеет этого по умолчанию, команда установкиsudo apt-get install openssh-server
Вход без пароля
Раздражает необходимость вводить пароль каждый раз, когда вы используете ssh? Противоположностью аутентификации по паролю является аутентификация с открытым ключом. Другими словами, чтобы войти в систему без пароля, вы должны сначала настроить ключ SSH. То есть локальный компьютер генерирует открытый ключ и закрытый ключ, а затем помещает открытый ключ на удаленный сервер! Принцип очень прост, то есть пользователь хранит свой публичный ключ на удаленном хосте. При входе в систему удаленный хост отправляет пользователю случайную строку, а пользователь шифрует ее своим закрытым ключом и отправляет обратно. Удаленный хост выполняет расшифровку с помощью предварительно сохраненного открытого ключа. В случае успеха это доказывает, что пользователь доверенный, и разрешает вход в оболочку напрямую, не требуя пароля.
# 查看本地有没有
ls ~/.ssh
# 没有就生成
ssh-keygen
# 在~/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
# 把公钥放到远程服务器
ssh-copy-id user@remote -p port
# 比如我的 ssh-copy-id zhm@120.79.52.223
ssh-copy-id
В основном установлен, если нет, на Macbrew install ssh-copy-id
.
проблемы с окнамиssh user@remote -p port 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
, что означает, что новая папка .ssh выполняется на удаленном конце, а локальный ~/.ssh/id_rsa.pub (то есть открытый ключ) добавляется к удаленному .ssh/authorized_keys. Конечно, если вы не используете эту команду, вы также можете вручную управлять этим процессом, то есть сначала скопировать открытый ключ, затем войти на удаленную машину и вставить его в .ssh/authorized_keys.
Настроить псевдонимы
Входить каждый разssh user@remote -p port
, это будет очень хлопотно через долгое время, особенно когда нужно ввести пользователя, удаленный и порт, и это нелегко запомнить. Настройка псевдонимов позволяет нам еще больше лениться. Например, я хочу использоватьssh lab
заменить вышеуказанную строку
# cat>>某文件<<EOF追加下内容, >> 追加的意思 <<EOF 遇到EOF终止
# 因为是前端,直接用vscode编辑
code ~/.ssh/config
# 追加以下内容,保存
Host lab
HostName remote
User user
Port port
# 来登录吧
ssh lab
# 比如我的
# Host han
# HostName 120.79.52.223
# User zhm
# Port 22
# ssh han
Командная строка выполняет вход в систему и выполняет команду на целевом сервере.
Командная строка выполняет вход в систему и выполняет команду на целевом сервере:
# 单引号或者双引号,将命令包起来,然后分号隔开命令
ssh user@remoteNode "cd /home ; ls"
Если команд много, нужно собрать скрипт.
# 建一个脚本文件test.sh,里面写上这个,然后执行 sh test.sh
#!/bin/bash
# 远程执行的内容在"< < remotessh " 至" remotessh "之间,如果不想本机出现日志的话 ssh user@remoteNode >/dev/null 2>&1 << remotessh
ssh user@remoteNode << remotessh
ls
exit
remotessh
Ах, легко писать скрипты, есть дрова!
передавать файлы
scp может использоваться для передачи файлов между двумя машинами.Формат его адреса в основном такой же, как и у ssh.Имя пользователя и порт можно не указывать.Небольшое отличие состоит в том, что при указании порта используется прописная буква -P вместо строчной. . Однако, если вы настроили псевдонимы, это не имеет значения, потому что scp также напрямую поддерживает псевдонимы
# 总的:本机的可以省略电脑的ip,默认的远程当前文件夹是 Home目录(~),将A电脑上的文件复制到B电脑上
# 注意的地方:A若是文件,B电脑若也是文件的路径,不管文件存不存在,都会将A文件内容写入到B这个文件。
# B电脑若是文件夹,不管文件夹存不存在,都会在这个文件夹下生成A电脑同名的文件和内容,有的话则会覆盖同名文件
# A若是文件夹,加上-r,B电脑若是文件的路径会报错,B电脑若是文件夹路径,文件夹不存在的话则会建立这个文件夹且放入A文件夹里面的内容(相当于将A文件夹挪过去然后重命名),文件夹存在的话,会在这个文件夹下面生成一个和A同名的文件夹,里面内容一致
scp A电脑:文件路径 B电脑:文件路径
# 把本地的 /path/to/local/file 文件传输到远程的 /path/to/remote/file
scp -P port /path/to/local/file user@remote:/path/to/remote/file
# 也可以使用别名
scp /path/to/local/file lab:/path/to/remote/file
# 把远程的 /path/to/remote/file 下载到本地的 /path/to/local/file
scp lab:/path/to/remote/file /path/to/local/file
# 远程的默认路径是家目录
# 下面命令把当前目录下的 file 传到远程的 ~/dir/file
scp file lab:dir/file
# 加上 -r 命令可以传送文件夹
# 下面命令可以把当前目录下的 dir 文件夹传到远程的家目录下
scp -r dir lab:
# 别忘了 . 可以用来指代当前目录
# 下面命令可以把远程的 ~/dir 目录下载到当前目录里面
scp -r lab:dir/ .
Если вам неудобно использовать командную строку для передачи файлов, вы также можете использовать протокол SFTP. Любой клиент, поддерживающий протокол SFTP, может использовать информацию вашей учетной записи SSH для входа в систему и управления файлами, например, графический FTP-клиент с открытым исходным кодом FileZilla. Не забывайте, в этих клиентах вы также можете указать свой приватный ключ (~/.ssh/id_rsa), и тогда вы сможете войти без пароля.
Держите программу работающей в фоновом режиме
На сервере выполняются следующие команды
nohup
# 让程序在后台运行 比如 nohup node index.js &
nohup 一直执行的命令 &
# 看下任务号 node的那个
ps
# 如果需要终止的话
kill 21455
tmux
tmux более способен выполнять сложные программы,tmux также может управлять多个窗口,窗口切分,复制粘贴
и т.д,Пользователям Mac удобнее использовать tmux, создать новый сеансtmux -CC
, при восстановленииtmux -CC attach
# 服务器上安装tmux
sudo apt-get install tmux
# 运行tmux,进入会话,此时运行任何东西都不会因为退出ssh而被杀死
tmux
# 暂时离开会话 ctrl+b 再按下d
# 恢复会话
# tmux attach
# tmux命令必须运行在服务器上
Знакомство с ssh от Ruan Yifeng
Базовое и расширенное использование ssh
Оболочка в Linux использует ssh для автоматического входа на удаленный сервер и выполнения команды и автоматически
ssh-переадресация