Если вы абсолютно не хотите работать с ключами (чего я не понимаю), есть способ открыть соединение и впоследствии использовать его.
Вы можете работать с опциями ssh ControlMaster
и ControlPath
: сначала используйте ControlMaster=yes
для установления соединения, запрашивая пароль и оставляя контрольный сокет в том месте, которое вы сказали сделать с помощью ControlPath
, Затем скажите вашим командам ssh использовать этот сокет с ControlMaster=no
.
echo "Creating control socket"
ssh $USERNAME@$HOSTNAME -o ControlMaster=yes,ControlPath=whereveryouwant -Nf
echo "Permission to Access to Remote Machine"
ssh $USERNAME@$HOSTNAME -o ControlMaster=no,ControlPath=whereveryouwant "pg_dump -f /dbexport.sql -t tb1 -t tb2 -t tb3 dbname"
echo "Permission to Access to Remote Machine to transfer data file"
scp -o ControlMaster=no,ControlPath=whereveryouwant $USERNAME@$HOSTNAME:/dbexport.sql /export/bin/
echo "Permission to delete temporary file on remote machine"
ssh $USERNAME@$HOSTNAME -o ControlMaster=no,ControlPath=whereveryouwant "rm /dbexport.sql"
echo "Creating Database..."
Но здесь я не совсем уверен, как избавиться от этого контрольного соединения, которое может представлять угрозу безопасности, в нужное время. Возможно, вы замените -Nf
на -f 'sleep 30m'`, в зависимости от того, как долго будет длиться весь процесс.
Другой альтернативой может быть, если на удаленном стандартном выводе нет других выходных данных, получить дамп SQL напрямую через канал без использования временного файла.
ssh $USERNAME@$HOSTNAME "pg_dump -f - -t tb1 -t tb2 -t tb3 dbname" > /export/bin/dbexport.sql
Короткий, аккуратный, без потенциально мешающих промежуточных файлов. (Но я не уверен насчет части -f -
- может быть, есть другой способ сказать pg_dump выводить свои данные в stdout.)