ssh tunnels σε gitlab pipelines κανεις;;;;
# chat
b
ssh tunnels σε gitlab pipelines κανεις;;;;
d
τι εχεις μεχρι τωρα; εχω τρεξει εντολες μεσω ssh σε Pipeline
b
εχω εναν "jumpserver" που μονο μεσω αυτου μπορώ να φτασω στον site-server
παω να κανω λοιπον αυτό:
Copy code
script:
    - ssh bill@jumpserver -v -4 -L 60222:siteserver:22
    - ssh client@localhost -p60222 "pwd"
    - rsync -rtzu --delete --exclude-from=ci/exclusions -e "ssh -p 60222 -i /root/.ssh/id_ed25519 -o UserKnownHostsFile=/dev/null" --progress /builds/.../client/ client@localhost:/home/.../sites/...
το πρωτο βημα ανοιγει ενα tunnel στην 60222, τοπικά παιζει
στο CI δεν παίζει
d
αρα η 2η γραμμη δεν παιζει
εγω το χω ετσι
Copy code
ssh $DEPLOY_STAGING_SSH_HOST '/opt/cpanel/ea-php80/root/usr/bin/php /home/composerrepo/public_html/satis/bin/satis build --no-interaction ... '
οποτε για καθε εντολη που θελω στο remote, κανω ssh συνδεση
το var DEPLOY_STAGING_SSH_HOST ειναι το
user@server
κατσε μισο
b
το οποιο σημαινει οτι το deploy scipt ειναι στον ενδιαμεσο server?
d
nai
η 60222 ανοιγει ssh στον middle server στον middle τρεχεις ssh συνδεση για να τρεξει pwd στον client
χμ ισως γραμμη σε γραμμη δεν ακολουθει το ssh του middle server
σου βγαζει καποιο συγκεκριμενο error?
ίσως ο runner να μην μπορει να ανοιξει πορτα για να κανεις το tunnel
b
νομιζω οτι κλεινει την εντολη (και το connection) πριν παει στην επομενη γραμμη
οποτε δεν κραταει το port ανοιχτο για connections
δε δειχνει να μη με αφηνει, απλα μαλλον δε το κραταει open
d
τι image χρησιμοποιεις;
b
ubuntu18
d
εγω εχω αυτο, εχει και οδηγιες για διαφορα ssh στην αρχικη https://hub.docker.com/r/kroniak/ssh-client
b
θα ειναι πολυ διστακτικοι στο να αλλαξω και το image με τη μια φοβαμαι, ειχα σκοπο να το κανω σε 2ο βημα
αλλα σιγουρα αξιζει η προσπαθεια
d
ναι δεν νομιζω να παιζει μεγαλο ρολο το image, τουλαχιστον δες τις οδηγιες του kroniak, κι αυτο ανα γραμμη κανει ssh και πρωτα κανει αντιγραφη ο,τι αρχεια χρειαζεται
b
το ιδιο παω να κανω και εγω, απλα δεν εχει ανοιχτο το tunnel, θα δοκιμασω να το κανω με
&&
d
ναι • ssh middle "ssh client 'docker-compose build .......' "
ισως κατι τετοιο
b
αυτο θα τρεξει το 2ο command μεσα απο τον middleman
που σημαινει τα deploy-keys κτλ πρεπει να ειναι στον middleman, καθως και τα αρχεια
θες ο middle να κανει απλα το μεσιτη, να μην τρεξει τπτ, ολα να τρεξουν απο το ci-image
ειναι "ευκολο" τοπικα
d
αναγκαστικα θα κανεις ενα scp απο CI σε middle και στο τελος του pipeline θα διαγραφεις τα παντα
b
θα το ψαξω περισσοτερο, δε το βαζω κάτω
n
ίσως κάτι τέτοιο ssh user1@jump.server.com 'sshpass -p user2password ssh user2@target.server.local ls'
αυτό θα πρέπει να τυπώσει το ls από τον μέσα server
υποθέτω ότι ο jumpserver έχει εγκατεστημένο το sshpass αλλιώς είναι ακόμα πιο easy αν έχει key για τον target.server.local
b
και αυτο τρεχει το command στον 2ο server μεσα απο τον jump, θα δουλεψει, αλλα οχι στο σεναριο μου
εφοσον θελω να κανω rsync, τα αρχεια ολα ειναι στον server1, οχι στον jump, θελω να πανε απο τον 1 στο 2, οχι μεσω του jump, ο jump ειναι μονο tunnel
👍 1
n
απλά το tunnel ίσως να μην είναι δυνατό λόγο config. Πχ κάποιο firewall ή κάτι τέτοιο https://superuser.com/a/229753 . Μαλλον το πιο safe είναι να παει βήμα βήμα. Watching this thread άν έχει κάποιος άλλος κάποιον άλλο smarter τρόπο!
b
το tunnel τοπικα απο το λαπτομ μου παιζει, μονο στο CI δεν παιζει
γιαυτο και απορώ
το ειχαν να παιζει με το
sshuttle
που κανει ssh tunnels για όλα τα requests, αλλα σε επιπεδο CI ειναι overkill. Προσπαθώ να το κανω με plain tunnels και με το σκεπτικο να παει σε alpine image στο μελλον
👍 1
θα ενημερώσω αν βρω ακρη
d
αν φτιαξεις ενα αρχειο που να περιεχει τις εντολες που θες και στο CI να εχεις ενα
bash ./deploy-script.sh
?
b
@dimitriskri το ελυσα με τον πιο απλό τρόπο:
Copy code
before_script:
    - mkdir -p ~/.ssh
    - echo -e "$DEV_KEY" > /root/.ssh/id_ed25519
    - chmod 0700 /root/.ssh/id_ed25519
    - echo -e "$DEV_KEY_PUB" > /root/.ssh/id_ed25519.pub
    - chmod 0644 /root/.ssh/id_ed25519.pub
    - echo "Host VPN" > ~/.ssh/config
    - echo "  Hostname <http://VPN.com|VPN.com>" >> ~/.ssh/config
    - echo "  User bill" >> ~/.ssh/config
    - echo "Host dev" >> ~/.ssh/config
    - echo "  Hostname _______.210" >> ~/.ssh/config
    - echo "  User dev" >> ~/.ssh/config
    - echo "  ProxyCommand ssh VPN nc %h %p" >> ~/.ssh/config
    - apt-get install -y rsync > /dev/null
  script:
    - chmod 755 /builds/anrt-client/fingal/web/modules/contrib/devel
    - rsync -avz --delete --exclude-from=ci/exclusions -e "ssh -v -q -i /root/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /builds/_______/ dev:/home/sites/dev.ie
    - ssh dev "drush cr && drush updb -y && drush cim -y && drush cr"
φτιαχνω (γραμή γραμή) ένα .ssh/config και περναει εκει το proxycommand
οποτε κάθε ssh command που τρεχω ειναι ενα μονο process, τρεχει και τελειώνει