Это можно сделать из командной строки терминала с помощью простого сценария bash. Первый цикл по содержимому файла . Затем для каждой строки передайте эхо в awk и пусть awk извлечет второй столбец . Наконец, перенаправьте этот текст в новый файл.
Собираем все вместе:
while read line; do
echo $line | awk '{print $2}' >> new_file.txt
done
На ум приходят четыре метода:
Используя tmux
, вы можете отправлять строки или нажатия клавиш на панели, где ssh
может быть запущен/может быть настроен на выполнение:
tmux new -d -s mySession
tmux send-keys -t mySession.0 "ssh root@XXXX" ENTER
tmux send-keys -t mySession.0 "ls" ENTER
Ваш пробег может варьироваться в зависимости от того, сколько раз требуется подключение или есть ли пароль/ключ для использования, но здесь это, вероятно, очевидно.
Это может быть не так очевидно, но есть примерно два способа запуска команд через ssh напрямую:
ssh remote "command here"
или
ssh -t remote "command here"
ssh remote << 'EOF' # can use any other marker pair/string as explained below
command
list
here
EOF
Это дает вам больше свободы в том, что вы можете запускать, и здесь также меньше проблем с обработкой кавычек.
Одна из проблем заключается в том, что вам нужно либо использовать подсветку синтаксиса при создании heredoc в [здесь ваш текстовый редактор], чтобы вы могли видеть, правильно ли закрыт маркер heredoc
, особенно если указанный маркер появляется в любом строка, которую вы используете в вашем heredoc... (или просто используйте более длинный маркер heredoc, это тоже работает)
Вы можете использовать оба из них в зависимости от того, что вы хотите сделать, но знайте:
Он создаст один PID для каждого процесса ssh на вашей удаленной машине, поэтому, если вы хотите запустить несколько команд подряд и решите, что хотите разделить их на разные строки или heredoc, то в какой-то момент у вас закончатся PID. (, если это виртуальная машина/машина с ограниченным доступом или если у вас мало ресурсов на удаленном компьютере ).
Просто убедитесь, что вы закрыли их/оставили только один, чтобы вы могли оставить ssh-соединение, если хотите.
Любое из этих решений может жаловаться на то, что переменная TERM
не установлена,просто установите его так:
export TERM=xterm
Вы можете использовать expect, как упоминалось в другом ответе:
#!/usr/bin/expect -f
spawn ssh remote.server.com
expect "password: "
send "passwordhere?\r"
expect "$ "
...... ##Various automated commands##
expect "$ "
send "exit\r"
Ваш пробег будет варьироваться гораздо больше здесь, учитывая, что expect
является своего рода попаданиемилипромахом , особенно когда дело доходит до взаимодействия с запросами пароля...
Вы можете использовать другие методы, такие как следующие:
sendkeys
из этого репозитория и/или xdotool
из вашего локального репозитория могут отправлять ключи/строку в определенные окна, которые могут быть установлены на терминал, работающий ssh
или что-то еще, что вы можете выбрать. Ниже приведен пример синтаксиса ()для обоих. sendkey.sh "Yourwindowname" "yourstringorkey"
и/или
xdotool type --window "window ID here" "your string here"
Примечание:
Иногда xdotool
и/или sendkey
могут работать или не работать в разных окнах/программах, но оба должны работать на большинстве терминалов.
Если один не работает, попробуйте другой. Кроме того, wmctrl
также, вероятно, должен быть установлен, чтобы получить идентификатор/pid/информацию окна (с ), на которое вы ориентируетесь, если только вы не предпочитаете использовать xprop
для этого... (, который уже установлен в большинстве дистрибутивов ).
Наконец, вы могли бы один из этих:
evdev
(спасибо @Forest за упоминание об этом)pyinput
pyautogui
Эти три в основном используются в качестве библиотеки Python, хотя также перенесены на другие языки... Это сделало бы этот ответ слишком длинным, если бы я осветил это здесь, поэтому я позволю кому-то другому сделать это в своем собственном ответе..
Нет. По своей природе процессы не работают в Unix/Linux таким образом.
Программа expect
может быть чем-то полезна, если я понимаю, что вы хотите. Прочтите man expect
.