Puncte:0

Copierea fișierelor într-un director protejat de pe un server la distanță

drapel ru

Lucrez la un script care trebuie să copieze unele fișiere de pe o mașină locală într-un director de pe un server la distanță. Problema cu care mă confrunt este că directorul (/etc/init.d) este deținut de root, așa că primesc excepții de permisiuni dacă încerc să copiez fișiere în el. Asta înseamnă că nu pot folosi scp fără a mă autentifica ca root.

Cea mai apropiată soluție pe care am găsit-o până acum este acest răspuns: https://askubuntu.com/a/872537/798391 . Din păcate, răspunsul dat nu prea funcționează și niciuna dintre sugestiile oferite în comentarii nu pare să o rezolve. Dacă fug

cat myscript.sh | ssh foo@myserver „sudo tee -a /etc/init.d/myscript.sh”

Primesc eroarea

sudo: fără tty prezent și nici un program askpass specificat

Unul dintre comentarii a sugerat adăugarea -t la comanda ssh

cat myscript.sh | ssh -t foo@myserver „sudo tee -a /etc/init.d/myscript.sh”

dar asta a dus la eroare

Pseudo-terminalul nu va fi alocat deoarece stdin nu este un terminal.

O altă opțiune sugerată a fost să folosiți argumentul -S al sudo

cat myscript.sh | ssh foo@myserver "sudo -S tee -a /etc/init.d/myscript.sh"

Cel puțin, aceasta solicită parola, dar expiră și solicită din nou înainte ca parola să poată fi introdusă complet.

În acest moment am rămas fără idei.Există vreo modalitate de a face această comandă să funcționeze? Există o soluție alternativă mai bună pentru copierea fișierelor într-o locație la distanță protejată?

Puncte:0
drapel cn
raj

Pot exista diverse metode pentru a obține ceea ce doriți, depinde de configurația detaliată a ambelor mașini.

Cea mai simplă metodă ar fi (dacă acest lucru este posibil) să configurați autentificarea ssh bazată pe chei, astfel încât utilizatorul local să poată ssh ca root pe mașina de la distanță.

O altă metodă este utilizarea aştepta pentru a scrie un script care se conectează interactiv prin ssh la mașina de la distanță, nu sudo -i (și tastați parola corespunzătoare) și apoi copiază fișierul făcând scp în sens invers (ex. scp este executat pe serverul de la distanță către mașina dvs. locală - trebuie să aibă un server ssh activ).

Soluția care este probabil cea mai apropiată de ceea ce ați încercat inițial este următoarea:

  1. pregătiți un scenariu (să-l numim /tmp/parolă) cu următorul conținut:

     #!/bin/sh
     ecou parola
    

    Unde parola este parola reală pentru utilizator foo pe server la distanță.

  2. chmod 700 /tmp/parolă astfel încât fișierul să fie executabil și nimeni, în afară de proprietar, să nu îl poată accesa

  3. copiați fișierul (păstrând permisiunile) pe serverul de la distanță cu scp -p /tmp/parolă foo@serverul meu:/tmp

  4. utilizați următoarea comandă:

     cat myscript.sh | ssh foo@myserver "SUDO_ASKPASS=/tmp/parola sudo -A tee -a /etc/init.d/myscript.sh"
    
drapel ru
Am configurat autentificarea bazată pe cheie, cel puțin cred că da. Nu sunt pe deplin sigur cum ar ajuta asta, deoarece ar trebui să rulez comanda de copiere cu permisiuni ridicate pe serverul de la distanță și, prin urmare, ar trebui să furnizez o parolă.
raj avatar
drapel cn
raj
@pbuchheit Puteți face `ssh root@myserver`? Mă refeream la configurarea autentificării cheii, astfel încât să o poți face.
drapel ru
Nu. De fapt, nu vreau să mă autent ca root.
raj avatar
drapel cn
raj
@pbuchheit Deci, încercați soluția pe care am descris-o.
drapel ru
care solutie? Folosirea așteptare este o interdicție; alți membri ai echipei trebuie să poată rula acest script fără a avea nevoie de biblioteci suplimentare. Adăugarea unui fișier care conține parola la serverul de la distanță pare redundantă. Am deja configurată autentificarea cu cheie.
raj avatar
drapel cn
raj
@pbuchheit Poate încercați asta înainte de a comenta că „pare redundant”. Acest fișier este folosit pentru a furniza passowrd la sudo (nu la ssh), astfel încât să nu vă ceară. Ai întrebat „Există vreo modalitate de a face această comandă să funcționeze?”. Ți-am dat un răspuns **testat**, dar spui că nu vrei să-l încerci - atunci e problema ta.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.