@ জাকুজে-র উত্তরের সমস্যাটি হ'ল: এটি কেবল সকেটগুলির সাথেই কাজ করে , তবে আপনি তাদের সাথে ফাইল প্রত্যাশার মানক ইউনিক্স সরঞ্জামগুলি ব্যবহার করতে পারবেন না :
ssh -R/tmp/sock.remote:/tmp/sock.local "$HOST" 'LANG=C cat >/tmp/sock.remote'
bash: /tmp/sock.remote: এ জাতীয় কোনও ডিভাইস বা ঠিকানা নেই
এছাড়াও সমস্যা আছে যে স্থানীয় সকেট ফাইলটি দূরবর্তী হোস্টে মুছে ফেলা হয় না; এর পরে যখন আপনি একই কমান্ডটি চালান, আপনি একটি সতর্কতা পান এবং সকেটটি সঠিকভাবে পুনরায় তৈরি হয় না। আপনি সেই পুরানো সকেটটি লিঙ্ক -o StreamLocalBindUnlink=yes
করার বিকল্পটি দিতে পারেন ssh
, তবে আমার পরীক্ষাগুলিতে এটি যথেষ্ট ছিল না; সেই বিকল্পটি কাজ করার জন্য আপনাকে সম্পাদনা করতে sshd_config
হবে StreamLocalBindUnlink=yes
।
কিন্তু আপনি ব্যবহার করতে পারেন socat
বা netcat
বা অনুরূপ কোন সমর্থনকারী টুল ইউনিক্স স্থানীয় সকেট ( netcat-traditional
হয় না যথেষ্ট!) ফাইল ট্রান্সফার জন্য স্থানীয় সকেট ফরওয়ার্ডিং ব্যবহার করার জন্য:
# start local process listening on local socket, which receives the data when ssh opens the connections and saves it to a local file
nc -l -N -U /tmp/sock.local >/tmp/file.local &
# connect to remote $HOST and pipe the remote file into the remote socket end
ssh \
-o ExitOnForwardFailure=yes \
-o StreamLocalBindUnlink=yes \
-R /tmp/sock.remote:/tmp/sock.local \
"$HOST" \
'nc -N -U /tmp/sock.remote </tmp/file.remote'
আপনি ইন্টারেক্টিভ কমান্ডগুলিও চালাতে পারেন, ssh -t
সেক্ষেত্রে আপনার টিটিওয়াই বরাদ্দ দেওয়ার জন্য ব্যবহার করা উচিত ।
এই সমাধানটির সাথে সমস্যাটি হ'ল আপনাকে অবশ্যই ইউনিক্স স্থানীয় সকেটের পাথগুলি হার্ড-কোড করতে হবে: স্থানীয়ভাবে এটি এতটা সমস্যা নয় যেহেতু আপনি $$
প্রক্রিয়া অনুসারে বা ব্যবহারকারীকে একটি অস্থায়ী ডিরেক্টরি হিসাবে অনন্য করে তোলার পথে অন্তর্ভুক্ত করতে পারেন , তবে রিমোট-এন্ড আপনি আরও ভাল করে বিশ্ব-রচনামূলক ডিরেক্টরিটি ব্যবহার করবেন না /tmp/
যেমনটি আমি আমার উদাহরণে করি। ssh
সেশন শুরু হওয়ার পরে ডিরেক্টরিটি ইতিমধ্যে উপস্থিত থাকতে হবে । এবং সকেট ইনোডটি সেশনটি বন্ধ হওয়ার পরেও থাকবে, সুতরাং "OME HOME / .ssh। Like" এর মতো কিছু ব্যবহার করে আপনার ডিরেক্টরিটি সময়ের সাথে সাথে মৃত আইনের সাথে বিশৃঙ্খলা করবে।
আপনি আবদ্ধ টিসিপি সকেটগুলিও ব্যবহার করতে পারেন localhost
, যা আপনাকে মৃত আইনোডগুলি দিয়ে আপনার ফাইল সিস্টেমগুলিকে গোলমাল করা থেকে বাঁচাতে পারে, তবে তাদের সাথে এখনও আপনাকে একটি (অনন্য) অব্যবহৃত পোর্ট নম্বর চয়ন করতে সমস্যা করতে হবে। তাই এখনও আদর্শ নয়। ( ssh
গতিশীলভাবে বন্দর বরাদ্দ করার কোড রয়েছে তবে আমি দূরবর্তী হোস্টে সেই তথ্য পুনরুদ্ধার করার কোনও উপায় পাইনি))
সম্ভবত ফাইল কপি করার সবচেয়ে সহজ সমাধান ব্যবহার করতে SSH বিল্ট-ইন-এর জন্য সংযোগ ভাগ কার্যকারিতা এবং একটি করতে scp
বা sfrp
যখন আপনার ইন্টারেক্টিভ সেশান তথাপি সমান্তরাল চলমান কমান্ড। দেখুন কপি SSH সাথে স্থানীয় সিস্টেমের জন্য একটি ফাইল ফিরে ।
closefrom(STDERR_FILENO + 1)
ওপেনএসএসএইচ উত্স কোডের অধীনে বিভিন্ন কল দেওয়া কৌতুকপূর্ণ উত্স সম্পাদনা ছাড়াই নয় । আপনি এটি করার জন্য কী চেষ্টা করছেন?