Если вам не разрешено создавать доступ без пароля с помощью :ssh-keygen user@remotehost
, вы можете установить обычный инструмент expect
,и создайте скрипт с именемpassexpect
:
#!/usr/bin/expect -f
set timeout 20
set cmd [lrange $argv 1 end]
set password [lindex $argv 0]
log_user 0
eval spawn $cmd
expect "assword:"
send "$password\r";
interact
затем в основном сценарии оболочки вы можете прочитать пароль один раз:
printf "ssh password:" >&2; read -s pass; printf "\n">&2
и используйте его в любой команде ssh:
passexpect $pass ssh user@remotehost command_for_remote_host
или для ваших целей полный сценарий будет:
#/usr/bin/env bash
printf "ssh password:" >&2; read -s pass; printf "\n">&2
./passexpect $pass ssh user@remotehost cat remoteF1.txt | diff - localF1.txt
./passexpect $pass ssh user@remotehost cat remoteF2.txt | diff - localF2.txt
Похоже на ошибку libvirt. Он проверяет конфликты портов, используя 0.0.0.0
, не принимая во внимание адрес прослушивания.
Вы, вероятно, можете обойти это, используя сквозную передачу командной строки qemu для передачи допустимого -spice
аргумента в qemu, на который libvirt не будет смотреть. Не очень дружелюбный, но это вариант, если вы просто хотите, чтобы что-то работало