Impossible de vraiment un arrière-plan tunnel SSH en utilisant Fabric et nohup
Question
Je ne peux pas sembler obtenir tissu à jouer agréable avec un processus semi-finition que j'ai nohup utilisé sur. . . Il devrait être possible, compte tenu de divers éléments d'information, y compris et ici .
def test():
h = 'xxxxx.compute-1.amazonaws.com'
ports = [16646, 9090, 6666]
with settings(host_string = h):
tun_s = "ssh -o StrictHostKeyChecking=no -i ~/.ssh/kp.pem %s@%s " % (env.user, h)
for port in ports:
p_forward = "-L %d:localhost:%d" % (port, port)
tun_s = "%s %s" % (tun_s, p_forward)
tun_s = "%s -N" % tun_s
# create the tunnel. . .
print "creating tunnel %s" % tun_s
run("nohup '%s' >& /dev/null < /dev/null &" % tun_s)
print "fin"
sortie abrégée:
ubuntu@domU-xxx:~/deploy$ fab test
executing on tunnel ssh -o StrictHostKeyChecking=no -i ~/.ssh/kp.pem ubuntu@xxx -L 16646:localhost:16646 -L 9090:localhost:9090 -L 6666:localhost:6666 -N
[xxx.compute-1.amazonaws.com] run: nohup 'ssh -o StrictHostKeyChecking=no -i ~/.ssh/kp.pem ubuntu@xxx.compute-1.amazonaws.com -L 16646:localhost:16646 -L 9090:localhost:9090 -L 6666:localhost:6666 -N' >& /dev/null < /dev/null &
fin
Done.
Disconnecting from xxxx
Je sais qu'il n'y a aucun problème avec la commande du tunnel en soi parce que si je Dépouiller les choses nohup il fonctionne très bien (mais évidemment tissu se bloque). Je suis sûr que ce n'est pas bien se détacher et lorsque la fonction d'exécution renvoie le processus de tunnel est immédiatement en train de mourir.
Mais pourquoi?
Cela se produit également avec une commande python dans une autre partie de mon code.
La solution
, il semble donc après beaucoup de tiraillements que cela est impossible pour une raison quelconque avec ma configuration (par défaut Ubuntu sur EC2 installe des cas). Je ne sais pas pourquoi et comme il semble possible selon diverses sources.
Je fixe mon problème particulier en utilisant Paramiko à la place du tissu, pour les appels qui doivent être gauche en arrière-plan. Ce qui suit pour cela:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
privkey = paramiko.RSAKey.from_private_key_file('xxx.pem')
ssh.connect('xxx.compute-1.amazonaws.com', username='ubuntu', pkey=privkey)
stdin, stdout, stderr = ssh.exec_command("nohup ssh -f -o StrictHostKeyChecking=no -i ~/.ssh/xxx.pem ubuntu@xxx.compute-1.amazonaws.com -L 16646:localhost:16646 -L -N >& /dev/null < /dev/null &")
ssh.close()