SSH direct stdin et robuste vers et depuis le client postgres

Mon local peut se connecter à distance, mais il ne peut pas se connecter à dbserver. La télécommand peut se connecter à dbserver (avec psql).

Je veux exécuter des scripts sql de mon local contre le db.

Je cherche une façon d'ouvrir un psql sur la télécommand et de diriger mon stdin et stdout vers mon local avec ssh.

Maintenant, dans l'option stupide, je fais ceci:

ssh remote psql -h db report password run my commands 

Je peux le faire dans un script de cette façon, mais il est laid et ne me permet pas une session interactive avec le psql.

 PSQL="PGPASSWORD=mypassword psql -h dbserver -d report" SQL="SELECT 1" ssh remote "$PSQL --command 'COPY ($SQL) TO STDOUT WITH CSV;'" 

Ps-Python est également OK.

2 Solutions collect form web for “SSH direct stdin et robuste vers et depuis le client postgres”

Utilisez un port ssh vers l'avant avec une session ssh sans direction en arrière-plan:

 $ ssh -N -f -L 5433:localhost:5432 remoteserver 

avec lequel vous pouvez alors utiliser:

 $ psql -h localhost -p 5433 

psql commands de psql comme \o , \i , etc. se référeront aux files sur l'ordinateur local.

Si vous essayez de le faire pour des raisons de script, vous voudrez probablement utiliser l'option -n de ssh et une key ssh sans mot de passe avec les options définies dans authorized_keys pour éviter qu'un shell ne soit généré afin que tout ce que vous pouvez faire soit transférer un port donné. Ceci est très important pour la security lors de l'utilisation de keys sans mot de passe. ssh-agent fournit une alternative un peu plus sécurisée, mais il est plus difficile pour les scripts. Rappelez-vous que votre script devra save l'ID du process de la session ssh arrière-plan qu'il a engendrée et le tuer à la fin de la tâche. Il est parfois plus facile d'utiliser le contrôle du travail de la shell plutôt que le mode de démonisation propre de ssh; de cette façon, la coquille suit le process fondé avec & et elle peut être terminée avec kill %jobid . Voir le contrôle du travail bash . (Vous devez faire l'arrière-plan de la session ssh de transfert de port afin que l'exécution du script puisse continuer et exécuter psql ).

Pour une utilisation interactive, vous pouvez simplement invoquer le psql distant sur ssh , auquel cas des commands comme \o , \i , \copy , etc. se référeront aux files locaux au server que vous voulez, et non à votre ordinateur local:

 $ ssh remoteserver psql 

Cela fonctionne aussi à des fins de script, mais est un peu less sécurisé que le renvoi de port puisque psql est un programme assez puissant qui vous permet de lire et d'écrire des files arbitraires, générer un shell, etc. Vous ne pouvez pas vraiment limiter ce qu'est une key ssh sans mot de passe faire si il est permis d'appeler à distance psql . D'autre part, il est beaucoup plus simple à écrire:

 ssh remoteserver psql <<'__END__' BEGIN; INSERT INTO blah(a,b,c) VALUES (1,2,3); UPDATE otherblah SET x = 99, y = 912; COMMIT; __END__ 

que de se soucier des sessions ssh de fond. Vraiment cela dépend de vos priorités.

Vous pouvez utiliser iptables sur la machine distante pour redirect le trafic postgresql vers le server db. Par exemple:

 iptables -A PREROUTING -s your_machine_ip -p tcp --dport 5432 -j DNAT --to-destination db_server_ip 

Bien sûr, cela nécessite un privilège d'administrateur sur la machine distante. Vous devez également activer le renvoi IP.

De votre machine, vous vous connectez juste à une machine distante et vous redirigez vers le server db. De cette façon, vous n'avez pas besoin de la connection ssh affichée.

En tant que note, vous devrez peut-être examiner les problèmes de security dans la façon dont vous vous connectez à votre système de database, surtout si vous le faites à distance sur un réseau non approuvé.

  • Comment supprimer la vérification des keys RSA ssortingctes dans SSH et quel est le problème ici?
  • Comment configurer l'access SSH pour l'authentification des keys pour un autre client?
  • login SSH refusée - Débogage à l'aide de la console de récupération
  • Comment accéder à l'instance AWS inaccessible?
  • Est-il nécessaire de connaître le nom d'user du count d'origine qui a été transféré dans le server?
  • Le count avec un nom conflictuel existe localement
  • Root n'a que l'autorisation de lecture pour / etc / ssh / sshd_config?
  • Activation des raccourcis alt dans bash sur EC2
  • git pull: Autorisation refusée (publickey)
  • Prévention - Un grand nombre de tentatives de connection échouées de l'IP
  • pourquoi l'authentification public SSH échoue sur un count mais fonctionne sur l'autre sur le même server
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.