কিভাবে sshpass ব্যবহার করবেন?


28

আমার sshpassএকটি জাভা কোড থেকে এসএসএইচের মাধ্যমে একটি রিমোট কমান্ড চালু করার প্রয়োজন ।

যদি আমি ম্যানুয়ালি কোনও কনসোল টাইপ করি:

ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'

পুরোপুরি কাজ করে, তবে পাসওয়ার্ড চাইবে asks তাই আমি দৌড়ানোর চেষ্টা করেছি sshpass:

sshpass -p mypass ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -l user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -t user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh user@ipaddress echo 'OK'

এবং তাদের কেউ কাজ করে না।

উত্তর:


28

এটি হোস্ট-কী চেক দ্বারা সম্পন্ন হতে পারে ssh। দেখে মনে হচ্ছে sshpassঅবৈধ হোস্ট কীগুলিতে নীরব থাকে (না কোনওটির আউটপুটও stderrনয় stdout) এবং স্থিতি-কোড সহ বিদ্যমান রয়েছে 6। এই লেখার সময়, এটি ছিল 50 টি রিভিশন, এবং কোডের সাথে মিল থাকা ধ্রুবকটি RETURN_HOST_KEY_UNKNOWN, যা সেই ত্রুটির প্রতি ইঙ্গিত দেয়।

আপনার ত্রুটি-কোডটি পৃথক হতে পারে এবং উপরের লিঙ্কযুক্ত কোডটির দিকে তাকানো আপনাকে কিছু অন্তর্দৃষ্টি দিতে পারে।

যদি আপনার সমস্যাটি একটি অবৈধ হোস্ট-চাবিকাঠি আপনি একটি CLI বিকল্প ত্রুটি অগ্রাহ্য প্রায় দ্বিগুন চিন্তা করা উচিত। আপনার মেশিনটি আপোস হতে পারে বা আপনি একটি এমআইটিএম আক্রমণ হতে পারে! আপনি যদি 100% নিশ্চিত হন যে এটি তেমন নয় এবং আপনার কাছে যাচাই করা হোস্ট-কীগুলি আপ টু ডেট রাখার উপায় নেই, আপনি এই জাতীয় আদেশ ব্যবহার করতে পারেন:

sshpass -pfoobar ssh -o StrictHostKeyChecking=no user@host command_to_run

2
ব্রু ইনস্টল করার সাথে, -p এর পরে একটি স্থানের প্রয়োজন। github.com/hudochenkov/homebrew-sshpass
AnneTheAgile

বিজ্ঞপ্তি: প্রত্যেককে মনে রাখা উচিত যে যখনই সম্ভব পাসওয়ার্ডহীন এসএসএইচ হোস্ট কীগুলি ব্যবহার করা আরও সুরক্ষিত! সংজ্ঞা অনুসারে, এসএসএইচপাস ব্যবহার কম সুরক্ষিত।
প্রশ্নোত্তর

@ কিউশনেশনমার্ক এটি সত্য হলেও, এমন প্রান্তের কেস রয়েছে যেখানে দূরবর্তী শেষ পয়েন্টটি কী দ্বারা প্রমাণীকরণ সমর্থন করে না। Sshpass কাজে আসে কোনটি
Exhuma

হ্যা আমি জানি. সেজন্য আমি "যখনই সম্ভব" বলেছেন ...
questionmark

1
নতুন যথেষ্ট এসএসএইচ সহ, রয়েছে StrictHostKeyChecking=accept-new
মুরু

5

sshpassকেবলমাত্র পাসওয়ার্ড প্রম্পট শেষ হলেই কাজ করে assword:

যদি আপনার পাসওয়ার্ড প্রম্পট আলাদা হয় তবে আপনার প্রম্পটটি সনাক্ত করতে আপনাকে উত্সকোড সামঞ্জস্য করতে হতে sshpassপারে।

আমি Password for user@host:কয়েকটি সিস্টেমে পাসওয়ার্ডের অনুরোধগুলি দেখেছি , সম্ভবত এটি আপনার সমস্যা।


1
দুঃখিত? -P prompt Which string should sshpass search for to detect a password prompt
এম

2
এই নতুন বিকল্পটি (কমপক্ষে sshpass এর V1.0.6 এর প্রয়োজন) এই সমস্যার সমাধান করে।
rjs

ওহ দুঃখিত. এই জাতীয় সমস্যা (সমাধান?) প্রায়শই ঘটে যায়, পুরানো প্রশ্নগুলি যা ইতিমধ্যে নতুন সংস্করণে স্থির করা হয়েছে। ধন্যবাদ।
এম

2

আমি মনে করি আপনি এর মতো কিছু চান:

sshpass -p yourpassword ssh user@ipaddress somecommand

উদাহরণস্বরূপ, এটি আমার পক্ষে কাজ করে:

sshpass -p mypassword ssh username@10.0.0.9 touch foo

1

আপনি পাসওয়ার্ডহীন লগইন সেটআপ করেছেন?

ওপেনএসএইচ http://www.debian-administration.org/articles/152 এর সাথে পাসওয়ার্ড-কম লগইন


বরং এন্টারপ্রাইজে পাসওয়ার্ড-কম লগইন সক্ষম করার অসুবিধার কারণে আমি এসএসপাসে আটকে থাকি
রোমান আরডিজিজেড

আপনি কি এটিকে চেষ্টা করেছেন: sshpass -p 'mypass' ssh ব্যবহারকারীর নাম
@server.example.com

আমি করেছি, আমি 'মাইপাস' বা মাইপাস ব্যবহার করি না, তাতে কিছু আসে যায় না। এটি চিরকাল অপেক্ষা করা শুরু করে
রোমান আরডিজিজেড

sshpass -V কাজ করে?
koni_ ভয়

এটি মুদ্রণ করে: "এই প্রোগ্রামটি নিখরচায় সফ্টওয়্যার, এবং জিপিএল এর শর্তাবলীতে বিতরণ করা যেতে পারে। আরও তথ্যের জন্য কপি ফাইলটি দেখুন"। এবং তারপরে তার সম্পাদন শেষ হয় এবং অন্য কিছুই করে না (আমি যে কমান্ডটি পরিচালনা করছিলাম তার শুরুতে VV যোগ করার চেষ্টা করেছি, কেবল sshpass -V টাইপ না করে)
রোমান আরডিজিজে

1

এটি করার প্রচুর উপায় রয়েছে, এখানে আমার প্রস্তাবিত সমাধান:

প্রথমত, আপনার পাসওয়ার্ডটি একটি ভেরিয়েবলে সংরক্ষণ করা আপনাকে আরও নমনীয় কমান্ড দেয়। sshpassএর জন্য একটি বিকল্প রয়েছে:

-e: এই বিকল্পটি $SSHPASSপরিবেশের পরিবর্তনশীল থেকে পাসওয়ার্ড পড়তে দেয়

আপনার এই ভেরিয়েবলটি সেট করার দুটি উপায় রয়েছে:

  1. আপনার কোডে সরাসরি সেট করুন:

    export SSHPASS='your_pass'
    
  2. অথবা এটির জন্য জিজ্ঞাসা করুন:

    readPassword () {
      echo Ssh Password: 
      read -s SSHPASS
      eval "export SSHPASS='""$SSHPASS""'"
    }
    
    # read password
    
    readPassword
    

আপনার আদেশ কার্যকর করার চেয়ে;

  1. যদি আপনার কমান্ড স্থিতিশীল হয় তবে এটি সরাসরি চালান:

    sshpass -e ssh user@host << EOF
    mplayer '/media/data/myFavouriteSong.mp3'
    command2 parameter1 parameter2 parameter3 ...
    command3 parameter1 parameter2 parameter3 ...
    ...
    EOF
    
  2. যদি আপনার আদেশটি এই জাতীয় গতিশীল হয়:

    DYN_FILE_LOC='/media/data/myFavouriteSong.mp3'
    
    eval 'sshpass -e ssh user@host << EOF
    mplayer "$DYN_FILE_LOC"
    command2 parameter1 parameter2 parameter3 ...
    command3 parameter1 parameter2 parameter3 ...
    ...
    EOF'
    

আশা করি এটি কাউকে সাহায্য করবে


আপনার রিডপাসওয়ার্ড ফাংশনে, আপনি কি কেবল এসএসএইচপিএসএস এক্সপোর্ট করতে পারবেন না?
কুত্স্কেম

@ কুত্স্কেম, আমি বিশ্বাস করি তবে আমার ধারণাটি আমি এখানে ভাবি; আমি কোনও স্ট্যাটিক ফাইলে আমার পাসটি লিখতে চাই না তবে প্রচুর সার্ভার (++) এর জন্য বার বার পাসওয়ার্ড লেখার পরিবর্তে আমি একবার লিখি :) আপনাকে readPasswordফাংশন ব্যবহার করতে হবে না , আপনি কেবল নিজের পাসওয়ার্ডটি লিখতে পারেন, এটি কাজ করা উচিত :) কেবলমাত্র আমি আমার কোডটি ভাগ করতে চাই যা sshpassডায়নামিক কমান্ডগুলির জন্য ব্যবহার করে একটি উদাহরণ দেখায় : D
veysiertekin

না, আমি কেবল বোঝাতে চাইছি রিডের পরে ইওল আবশ্যক নয়, রফতানিকে কোনও অ্যাসাইনমেন্টের প্রয়োজন হয় না। ss64.com/bash/export.html
kutschkem

-ই সমস্যাটি
হ'ল রফতানিটি

0

sshpassসিউডো টার্মিনাল ব্যবহার করে এবং manপৃষ্ঠাটিতে মাঝে মাঝে বিরতি হওয়ার জন্য ক্ষমা প্রার্থনা করা রয়েছে। আপনি চেষ্টা করতে পারেন fd0ssh। আপনার যদি stdinদূরবর্তী মেশিনে কোনও প্রক্রিয়া প্রেরণের দরকার না হয় তবে এটি কাজ করে। এটি যদি আপনি কেবল একটি আদেশ জারি করেন এবং ফলাফলটি ক্যাপচার করেন তবে এটি কাজ করে।


0

sshpass সিনট্যাক্স হয়

sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments

নোট করুন যে -p এবং পাসওয়ার্ডের মধ্যে কোনও স্থান নেই।

এছাড়াও আমি লক্ষ্য করেছি যে আপনি যে মেশিনে সংযোগ করছেন তার আরএসএ কী পেতে আপনাকে কমপক্ষে একবার নিজেই ~/.ssh/known_hostsএসএসএসের সাথে সংযোগ করতে হবে, এসএসপিএস আপনাকে সংযোগ করার অনুমতি দেওয়ার আগে ফাইলে যেতে হবে।

সুতরাং পরিচিত_হোস্ট ফাইলটিতে এন্ট্রি পাওয়ার পরে আমি একটি কমান্ড চালাতে পারি

sshpass -ffilename_with_password_in_it ssh user@server uname -a

এবং এটি uname -aদূরবর্তী সার্ভারে কমান্ডটি কার্যকর করবে এবং ফলাফলটিকে স্থানীয় মেশিনে স্ট্যান্ডার্ড আউটপুট দেবে।


0

আপনার যা দরকার তা হ'ল -f -t -t -t

sshpass -p$PASS ssh -f -t -t -t $USER@$HOST $COMMAND

অতিরিক্ত হিসাবে আপনি দূরবর্তী মেশিনে sudo কনফিগারেশন (/ etc / sudoers) থেকে "প্রয়োজনীয়তা" অপসারণ করতে পারেন।


0
  1. একটি চাবি তৈরি করুন

    ssh-keygen -t rsa

  2. রিমোট সার্ভারে একটি .ssh ফোল্ডার তৈরি করুন এটি একটি পাসওয়ার্ড চাইবে

    ssh $USER@SEVERNAME mkdir -p .ssh

  3. রিমোট সার্ভারে কীটি অনুলিপি করুন

    cat .ssh/id_rsa.pub | ssh $USER@SERVER 'cat >> .ssh/authorized_keys'


এটি পাসওয়ার্ড চেয়েছে কিনা তা পরীক্ষা করুন, না হলে এটি কাজ করা উচিত।

ssh $USER@SEVERNAME 'command'

0

@ ইজহুমার একটি উদাহরণ রয়েছে যা এটি আমার পক্ষে কাজ করে।

পাসওয়ার্ডটি -pPassword(স্থান ছাড়াই) আকারে থাকা দরকার

উদ্ধৃতিগুলিও প্রয়োজনীয় হতে পারে: sshpass -p'Password&0' user@hostname

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