Я добавляю свою личную реализацию, используя awk
, таким образом, вы можете изменить разделитель
по своему усмотрению.
echo "line 1 and line 2" | awk -v separator="and" 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s%s", $1,FS,$2}'
Я всегда предпочитаю использовать awk
из-за возможности простого использования переменных. Если вы хотите разделить вашу строку на основе других разделителей , вы можете просто изменить значение разделителя
на другое.
Если вы хотите вырезать разделитель
из второй строки (я имею в виду вас, вы не хотите читать « и строка 2 », а только « строка 2 "):
echo "line 1 and line 2" | awk -v separator="and " 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s", $1,$2}'
-o password_stdin
, похоже, не работает на всех системах, например на freeBSD. и т.д.
Вы также можете использовать интерпретатор expect
, он должен работать с sshfs
и должен делать свое дело.
Другим решением может быть sshpass
, например, допустим, вы выполняете резервное копирование каталога / var / www
Резервное копирование:
name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www
загрузка файла резервной копии на сервер резервного копирования
sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name
Так что он будет загрузить каталог с сегодняшней резервной копией
Но все же, как было сказано выше, лучшим (безопасным и простым) способом было бы использовать пару ключей ssh
Единственное неудобство было бы, если бы вам нужно было пройти процесс генерации ключа один раз на каждом сервере, который вам нужно соединить, но это лучше, чем хранить пароль в текстовом формате на всех серверах, для которых вы хотите создать резервную копию :),
Генерация ключа Правильное соединение
На локальном сервере
ssh-keygen -t rsa
На удаленном сервере
ssh root @ remote_servers_ip "mkdir -p.ssh "
Загрузка сгенерированных открытых ключей на удаленный сервер
cat ~ / .ssh / id_rsa.pub | ssh root @ remote_servers_ip" cat >> ~ / .ssh / authorized_keys "{{1} }
Установить разрешения на удаленном сервере
ssh root @ remote_servers_ip "chmod 700 ~ / .ssh; chmod 640 ~ / .ssh / authorized_keys "
Login
ssh root @ remote_servers_ip
Включение протокола SSH v2
раскомментируйте" Протокол 2 "в / etc / ssh / sshd_config
включение авторизации с открытым ключом в sshd
раскомментируйте «PubkeyAuthentication yes» в / etc / ssh / sshd_config
Если для параметра StrictModes задано значение yes в / etc / ssh / sshd_config, тогда
restorecon -Rv ~ /.ssh
Согласно руководству, есть опция -o password_stdin
, которая может позволить прочитать пароль со стандартного ввода, что, вероятно, может быть перенаправлением. Я никогда им не пользовался, поэтому спекулирую.
Тем не менее, я настоятельно не рекомендую такое решение, которое по своей сути небезопасно.
ssh
очень хорошо работает с системой закрытых / открытых ключей. Это просто и безопасно. Не нужно вводить пароль или писать его в открытом виде в сценарии оболочки. Просто поместите свой открытый ключ на сервер, и вы можете немедленно подключиться.
echo 'password' | sshfs user@host:/dir /mnt -o password_stdin
Параметр "-o password_stdin" позволяет передать пароль по конвейеру.
При этом лучше использовать ключи, если только ваш поставщик услуг не разрешает использовать их для sftp. (Это один из заметных провалов WP Engine.)
una cosa a tener en cuenta es que si está utilizando la opción -o password_stdin
, puede parecer que no funciona porque sshfs le preguntará si desea conectarse al host o no (si es la primera vez que conéctese a él y aún no se agrega al archivo de hosts conocidos ). Si lo está ejecutando en un lote, nunca verá sshfs preguntando. Las soluciones para evitar esto son:
-o StrictHostKeyChecking=no
a sshfs o Автоматический скрипт для подключения sftp к sshfs
#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END