Use uma porta ssh para frente com uma sessão ssh de comando sem suporte:
$ ssh -N -f -L 5433:localhost:5432 remoteserver
com o qual você pode usar:
$ psql -h localhost -p 5433
Os comandos psql
, como \o
, \i
, etc., se referem aos arquivos no computador local.
Se você estiver tentando fazer isso para fins de script, provavelmente desejará usar a opção -n
do ssh e uma chave ssh sem senha com opções definidas em authorized_keys
para evitar que um shell seja gerado. all você pode fazer é encaminhar uma determinada porta. Isso é muito importante para a segurança ao usar chaves sem senha. ssh-agent
fornece uma alternativa um pouco mais segura, mas é mais desajeitado para scripts. Lembre-se de que seu script precisará registrar o ID do processo da sessão ssh em segundo plano gerada e eliminá-lo no final da tarefa. Às vezes é mais fácil usar o controle de tarefa do shell do que o modo de daemonização do próprio ssh; Dessa forma, o shell controla o processo em background com &
e pode ser finalizado com kill %jobid
. Consulte controle de trabalho bash . (Você precisa basear a sessão ssh de encaminhamento de porta para que a execução do script possa continuar e executar psql
).
Para uso interativo, você pode simplesmente chamar o controle remoto psql
over ssh
, nesse caso, comandos como \o
, \i
, \copy
, etc se referirão aos arquivos locais do servidor que você ssh'd para, não o seu computador local:
$ ssh remoteserver psql
Isso também funciona para scripts, mas é um pouco menos seguro do que fazer o redirecionamento de portas, pois psql
é um programa bastante poderoso que permite ler e gravar arquivos arbitrários, gerar um shell, etc. uma chave ssh sem senha pode fazer se for permitido invocar remotamente psql
. Por outro lado, é um muito mais simples de escrever:
ssh remoteserver psql <<'__END__'
BEGIN;
INSERT INTO blah(a,b,c) VALUES (1,2,3);
UPDATE otherblah SET x = 99, y = 912;
COMMIT;
__END__
do que mexer com sessões de fundo ssh. Realmente depende de quais são suas prioridades.