Sftp সংযোগে কীভাবে ডেটা পাইপ করবেন?


9

ftp put "|..." "remote-file.name"একটি এফটিপি সংযোগে ডেটা পাইপ করার কমান্ডটি সমর্থন করে । এসএফটিপি-এর জন্য কি তেমন কিছু পাওয়া যায়?

এসএফটিপিতে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

sftp 'jmw@backupsrv:/uploads'
sftp> put "| tar -cx /storage" "backup-2012-06-19--17-51.tgz"
stat | tar -cv /storage: No such file or directory

উপরের মত এসএফপি ক্লায়েন্ট স্পষ্টতই কমান্ডটি কার্যকর করে না।

আমি পাইপ কমান্ডটি সরাসরি ফাইল স্ট্রিমটিকে এসফটিপিতে পুনঃনির্দেশ করতে ব্যবহার করতে চাই। (কারণ এসফটিপি সার্ভারে আপলোড করার আগে একই ডিস্কে একটি ব্যাকআপ ফাইল তৈরি করার জন্য পর্যাপ্ত জায়গা বাকি নেই))


1
আমি এর জন্য একটি ফিফো ব্যবহার করার কথা ভেবেছিলাম, তবে এসএফটিপি বা এসসিপি উভয়ই কোনও ফিফো থেকে পড়তে পারবে না।
টম অ্যান্ডারসন

1
: এছাড়াও ভাল ধারণা, এই আমার qxs.ch/2012/07/05/sftp-upload-tool
JMW

উত্তর:


4

আমি এই সমস্যার সমাধান খুঁজে বের করতে বেশ মজা পেয়েছি। এটি উভয় মেশিনে সরঞ্জাম এনসি (নেটক্যাট) প্রয়োজন, এবং এসএসএইচ (এসএফটিপি প্রয়োজন হয় না)।

এই উদাহরণস্বরূপ, আমি সেই মেশিনটিকে কল করব যেটিতে লিনাক্স-এ ব্যাক আপ করার জন্য প্রয়োজনীয় ডেটা রয়েছে এবং সেই যন্ত্রটিকে ব্যাকআপ লিনাক্স-বি গ্রহণ করতে হবে।

লিনাক্স-এ, নেটক্যাট কোনও বন্দরে শুনুন (আমি 2000 নিয়েছি) এবং এটিকে একটি ফাইলে পুনঃনির্দেশ করুন। এটি কেবল সেখানে বসে অপেক্ষা করবে until বন্দরের মাধ্যমে কিছু না আসা পর্যন্ত।

[kenny@linux-b /var/backups]$ nc -l 2000 > backup.tgz

লিনাক্স-বি-তে, লিনাক্স-এ একটি এসএস টানেল খুলুন, আমি আবার পোর্ট 2000 ব্যবহার করেছি। এটি আপনার লোকালহোস্টের টিসিপি পোর্ট 2000 এ ফেলে দেওয়া যে কোনও কিছুই লিনাক্স-এ টিসিপি পোর্ট 2000 এ পুনর্নির্দেশ করবে, যেখানে নেটক্যাট শুনছে।

[kenny@linux-a /var/data]$ ssh -L 2000:localhost:2000 -CfN linux-b

এবার টার সংরক্ষণাগারটি তৈরি করুন, তবে স্ট্যান্ডআউটে আউটপুটটি প্রেরণ করুন (- ব্যবহার করে) এবং কিছু সংকোচনের জন্য জিপিতে পাইপ করুন। এখন পাইপ এটি অন্য নেটক্যাট যা এটি 2000 সালে পোর্টের টিসিপিতে লোকালহোস্টে প্রেরণ করে।

[kenny@linux-a /var/data]$ tar cf - important-data | gzip -fc | nc localhost 2000

সম্পন্ন করা হয়েছে! লিনাক্স-বি-তে নেটকাট আর শুনছে না, এবং একটি নতুন ফাইল তৈরি করা হবে। সর্বোত্তম অংশটি হ'ল টার সংরক্ষণাগারটি কখনও লিনাক্স-এ-এর হার্ড ডিস্কে স্থাপন করা হয়নি।

[kenny@linux-b /var/backups]$ file backup.tgz 
backup.tgz: gzip compressed data, from Unix, last modified: Thu Jul  5 13:48:03 2012

আমি জানি আপনি প্রশ্নটিতে যা চেয়েছিলেন ঠিক তা নয়, তবে আপনার যদি নেটক্যাট উপলব্ধ থাকে তবে এটি আপনার ধরণের সমস্যার একটি কার্যকর সমাধান।

সম্পাদনা: আমি একটি জিনিস ভুলে গিয়েছি: আপনি যদি এই নির্দেশাবলী অনুসরণ করেন তবে আপনার এখনও একটি এসএসএইচ টানেল লিনাক্স-এ ভাসমান। প্রক্রিয়া আইডি কী তা খুঁজে বের করুন এবং এটি হত্যা করুন।

[kenny@linux-a /var/data]$ ps -ef | grep "ssh -L"
kenny     5741     1  0 13:40 ?        00:00:00 ssh -L 2000:localhost:2000 -CfN linux-b
kenny     5940  3360  0 14:13 pts/1    00:00:00 grep --color=auto ssh -L
[kenny@linux-a /var/data]$ kill 5741

3
আমি এটি পছন্দ করি তবে 2 টি সমস্যা রয়েছে: sftponly ব্যবহারকারীরা সাধারণত পোর্ট ফরওয়ার্ডিং ব্যবহার করতে পারে না এবং sftponly ব্যবহারকারীরা sftp সার্ভারে NC অ্যাক্সেস করতে পারে না (মনে রাখবেন যে তাদের ssh অ্যাক্সেস নেই)
জেএমডাব্লু

1
এটি সম্পূর্ণ বৈধ সমালোচনা।
কেনি রাশচেয়ার্ট

অফ-টপিক, তবে কেন এই পোস্টটিতে এম্বেড থাকা "দ্য প্রস্টিজ" এর স্ক্রিন শট রয়েছে?
রিলিন্ডো

4

যেহেতু আপনি এই প্রশ্নের জন্য গুগল করে প্রথম ফলাফল হিসাবে খুঁজে পেয়েছেন এবং ইতিমধ্যে এটি উল্লেখ করা হয়নি আমি এখানে যে সমাধানটি পেয়েছি তা যুক্ত করব:

আপনি এর জন্য কার্লস এসএফটিপি বাস্তবায়ন ব্যবহার করতে পারেন। কার্ল সম্ভবত ইতিমধ্যে অনেকগুলি সিস্টেমে ইনস্টল করা আছে এটি কাস্টম ক্লায়েন্টগুলি ব্যবহার করে সমাধানের পক্ষে পছন্দ করা যেতে পারে।

উদাহরণস্বরূপ ব্যবহার:

pg_dump -d database | pigz -1 | curl -u username -T - sftp://sftpserver/folder/dbbackup.sql.gz

curl.ssh/known_hostsকী যাচাইয়ের জন্য আপনার ফাইল ব্যবহার করে। আপনার ssh ক্লায়েন্টটি নতুন এনক্রিপশন স্ট্যান্ডার্ডগুলি কার্লে ব্যবহৃত লাইব্রেরি দ্বারা সমর্থিত না হলে এটি ব্যর্থ হতে পারে

এটি ঠিক করতে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে পরিচিত হোস্ট ফাইলগুলিতে অন্যান্য মূল প্রকারগুলি যুক্ত করতে পারেন:

ssh-keyscan sftpserver >> ~/.ssh/known_hosts

অথবা আপনি -kপতাকাটি ব্যবহার করে কী যাচাইকরণ অক্ষম করতে পারেন (যদিও আমি এটি প্রস্তাব দিই না)


2

output-stream-generating-command | ssh user@remotehost 'input-stream-accepting-command' যদি আপনার দূরবর্তী ব্যবহারকারীর একটি বৈধ শেল থাকে তবে এটি একটি বিকল্প।


5
এটি sftp না !
jirib

3
@ জিরিসিচটকনিহা না, এটি নয় তবে এসএফটিপি প্রায় সবসময় আপনার এসএসএইচ সার্ভারের সাবসিস্টেম হিসাবে প্রয়োগ করা হয়, এবং এটি কার্যকারিতার সবচেয়ে নিকটতম এনালগ যা আমি প্রশ্ন থেকে অনুরোধ করা দেখছি (কোনও প্রোগ্রাম দ্বারা পরিচালিত হওয়ার জন্য এসএফটিপি-র মাধ্যমে পাইপ ডেটা) অন্য প্রান্তে)। কখনও কখনও উত্তরটি হয় "আপনি ভুল সরঞ্জামটি ব্যবহার করছেন - thisপরিবর্তে করুন"। - এটি আমাকে সেই সময়ের অন্যতম হিসাবে আঘাত করে।
voretaq7

2
এসএফটিপি প্রোটল, এবং এসএসএসের মাধ্যমে পাইপিং থেকে আলাদা, এটিই! দূরবর্তী অংশটি কেবল এসএফটিপি হলে আপনার পরামর্শ কার্যকর হয় না।
jirib

1
আমাকে ssh ব্যবহারকারী হিসাবে লগইন করার অনুমতি নেই
জেএমডাব্লু

1
@ জেএমডাব্লু সে ক্ষেত্রে যতদূর আমি জানি যে আপনি এখানে বেশ ভালভাবেই ক্ষতিগ্রস্থ হয়েছেন - আমি কখনও এসএফটিপি-র এমন সংস্করণ দেখিনি যা দূরবর্তী সিস্টেমের কোনও কমান্ডে পাইপিংকে সমর্থন করে (সম্ভবত এটি কারও কাছে প্রবেশ করে Sইক্যুর বিটকে পরাস্ত করবে) আপনার পরিস্থিতি যার শেল চালানোর প্রোগ্রামগুলি নেই)। যদিও আমি ভুল হতে পারি - আমি বেশিরভাগ
ওপেনএসএসএইচ-

1

voretaq7 উল্লেখ করেছে, যে sftp ক্লায়েন্ট ব্যবহারকারীদের জন্য পাইপযুক্ত ডেটা স্থানান্তর সমর্থন করে না, কেবলমাত্র সার্ভারের সাথে সংযোগ করার জন্য sftp ব্যবহারের অনুমতি রয়েছে।

ভাগ্যক্রমে, এখানে libssh2 রয়েছে, যা sftp সমর্থন করে। সুতরাং আমাদের কেবলমাত্র 2 অন্যান্য ক্লায়েন্টের প্রয়োজন লিবিএসএইচ 2 ব্যবহার করে, যা আমি কল করেছি:

  • sftp_stdin_upload (একটি এসএফপি সার্ভারে আপলোড করতে)
  • sftp_stdout_download (একটি এসএফপি সার্ভার থেকে ডাউনলোড করতে)

উত্স কোডটি নিম্নলিখিত URL এর অধীনে পাওয়া যাবে: http://www.qxs.ch/2012/07/05/sftp-upload-tool/


যেহেতু আমি libssh2 প্রোগ্রামিংয়ে অভিজ্ঞ নই, উত্স কোডটিতে যে কোনও প্রতিক্রিয়া জানাতে পেরে আমি খুশি।


আমার জন্য কাজ করে না :-( / usr / bin / ld: libssh2-1.4.2 / src / .libs / libssh2.a (ज्ञात হোস্ট.ও): 'ইভিপি_শায়ান' / usr / lib / libcrypto চিহ্নের অপরিবর্তিত রেফারেন্স। so.1.0.0: প্রতীক যোগ করার সময় ত্রুটি: কমান্ড লাইন সংগ্রহ 2 থেকে ডিএসও অনুপস্থিত 2: ত্রুটি: ld 1 প্রস্থান স্থিতি ফিরিয়ে দিয়েছে
tobixen

এই কোডটির কেবলমাত্র পোকির স্থিতি রয়েছে। এটি নিজেরাই নির্ধারণ করতে নির্দ্বিধায় :-)
জেএমডাব্লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.