Можно использовать ntpdate для запросов сервера времени
ntpdate -q ntp.ubuntu.com
Использовать переадресацию порта ssh с фоновым сеансом ssh без команд:
$ ssh -N -f -L 5433:localhost:5432 remoteserver
, с которым вы затем можете использовать:
$ psql -h localhost -p 5433
psql
команды, такие как \ o
, \ i
и т. Д. Будут относиться к файлам на локальном компьютере.
Если вы пытаетесь сделать это в целях написания сценариев, вы, вероятно, захотите использовать параметр ssh -n
и ключ SSH без пароля с параметрами, установленными в authorized_keys
, чтобы предотвратить создание оболочки, поэтому все , что вы можете сделать, это переадресация порта на заданный порт. Это очень важно для безопасности при использовании ключей без пароля. ssh-agent
предоставляет несколько более безопасную альтернативу, но более неуклюжую для написания сценариев. Помните, что ваш сценарий должен будет записать идентификатор процесса фонового сеанса ssh, который он породил, и убить его в конце задачи. Иногда проще использовать управление заданиями оболочки, чем собственный режим демонизации ssh; таким образом оболочка отслеживает процесс, связанный с и
, и его можно завершить с помощью kill% jobid
. См. управление заданиями bash . (Вам необходимо выполнить фоновый сеанс ssh перенаправления портов, чтобы выполнение сценария могло продолжаться и запускать psql
.)
Для интерактивного использования вы можете просто вызвать удаленный psql
через ssh
, и в этом случае команды типа \ o
, \ i
, \ copy
и т. Д. Будут ссылаться на файлы, локальные для сервера, на котором вы ssh 'd to, а не ваш локальный компьютер:
$ ssh remoteserver psql
Это также работает для сценариев, но несколько менее безопасно, чем перенаправление портов, поскольку psql
- довольно мощная программа, которая позволяет вам читать и записывать произвольные файлы, создавать оболочку и т. Д. На самом деле они ограничивают возможности ключа ssh без пароля, если ему разрешено удаленно вызывать psql
. С другой стороны, много проще написать:
ssh remoteserver psql <<'__END__'
BEGIN;
INSERT INTO blah(a,b,c) VALUES (1,2,3);
UPDATE otherblah SET x = 99, y = 912;
COMMIT;
__END__
, чем возиться с фоновыми сеансами ssh. На самом деле это зависит от ваших приоритетов.
С другой стороны, много проще написать:ssh remoteserver psql <<'__END__'
BEGIN;
INSERT INTO blah(a,b,c) VALUES (1,2,3);
UPDATE otherblah SET x = 99, y = 912;
COMMIT;
__END__
, чем возиться с фоновыми сеансами ssh. На самом деле это зависит от ваших приоритетов.
С другой стороны, много проще написать:ssh remoteserver psql <<'__END__'
BEGIN;
INSERT INTO blah(a,b,c) VALUES (1,2,3);
UPDATE otherblah SET x = 99, y = 912;
COMMIT;
__END__
, чем возиться с фоновыми сеансами ssh. На самом деле это зависит от ваших приоритетов.
Вы можете использовать iptables на удаленном компьютере для перенаправления трафика postgresql на сервер db. Например:
iptables -A PREROUTING -s your_machine_ip -p tcp --dport 5432 -j DNAT --to-destination db_server_ip
Конечно, для этого требуются права администратора на удаленной машине. Вам также необходимо включить переадресацию IP.
Со своего компьютера вы просто подключаетесь к удаленному компьютеру, и он перенаправляет вас на сервер базы данных. Таким образом, вам не нужно показанное ssh-соединение.
В качестве примечания, вам может потребоваться рассмотреть проблемы безопасности в том, как вы подключаетесь к своей системе базы данных, особенно если вы делаете это удаленно через ненадежную сеть.