Ранним утром в южном порту оживлённо работали большие машины и суетились люди, занятые погрузкой грузов в трюмы судов. Эти измождённые, склонившиеся под тяжестью труда фигуры казались незначительными на фоне массивных железных конструкций. Они трудились, чтобы заработать хотя бы немного хлеба. Когда колокол пробил полдень, шум утих — наступило время обеда.
В порт пришёл Гришка Челкаш, известный как заядлый пьяница и ловкий вор, хорошо знакомый с местными жителями. Этот босой, худой человек в изношенной одежде с густыми усами выделялся среди портовых бродяг своим взглядом, напоминавшим степного ястреба. Он искал своего друга и напарника Мишку, с которым планировал выгодное дело на ночь. От таможенного сторожа Челкаш узнал, что Мишку доставили в больницу с травмой ноги. Сторож затем вывел его к портовым воротам.
Присев неподалёку, Челкаш размышлял о предстоящем деле, требующем ловкости и усилий. Он вспомнил Мишку и, ругаясь про себя, признал, что без помощника не справится. Осмотревшись, он заметил неподалёку широкоплечего молодого человека с русыми волосами, одетого в крестьянскую одежду и с косой, обёрнутой в солому. Челкаш заговорил с ним, представившись рыбаком. Молодой человек, назвавшийся Гаврилой, рассказал, что приехал с Кубани, где работал наёмным косцом, но заработать не удалось из-за наплыва голодного народа и падения цен.
На вопрос о любви к свободе Гаврила ответил положительно, однако признался, что сам свободы не имеет: после смерти отца осталась мать и маленький участок земли, а жить надо. Его зовут в зятья в богатый дом, но из-за нежелания тестя отдавать дочь молодой человек должен будет долго работать на него. Мечтая о 150 рублях, он представлял, как построит дом, купит землю и женится на понравившейся девушке. Несмотря на надежды, на Кубани разбогатеть не удалось.
Доверчивый и добродушный Гаврила вызвал у Челкаша раздражение, однако помощник был необходим, и вор предложил пойти с ним «на рыбалку», чтобы за одну ночь хорошо заработать. Гаврила сначала испугался, подозревая неладное, и просил отпустить его, но после уговоров и под влиянием жадности согласился, ошибочно полагая, что речь о настоящей рыбалке. Сделку они заключили в полутёмном кабаке, полном сомнительных личностей. Челкаш осознавал, что теперь жизнь парня в его руках, и чувствовал себя его хозяином, одновременно испытывая зависть к молодости и свободе Гаврилы. Его чувства смягчились, приобретя оттенок отеческой заботы.
Ночью на шлюпке они вышли в море. Челкаш любил спокойное чёрное море, а Гаврила боялся его тьмы и тяжёлых туч. Парень спросил о рыболовных снастях, но Челкаш рассердился и строго приказал молчать. Поняв, что ожидает не рыбалка, Гаврила испугался и стал умолять отпустить его. Вор снова строго отругал его, и тот молча грёб, скрывая страх слезами.
Челкаш подвёл лодку к гранитной стене мола, забрал у Гаврилы весла и паспорт, чтобы тот не сбежал, и начал спускать в лодку тюки с украденным товаром. Испытав страх, Гаврила подчинился всем указаниям. Затем им предстояло пройти таможенные кордоны. Услышав об этом, Гаврила попытался звать на помощь, но в этот момент из воды поднялся яркий огненно-голубой свет — электрический фонарь таможенного крейсера, который осветил суда в темноте. От неожиданности Гаврила упал на дно лодки. Челкаш поднял его и объяснил, что это всего лишь фонарь.
После прохождения кордонов Челкаш, несколько расслабившись, сообщил, что за ночь заработал пятьсот рублей. Гаврила мечтал о хозяйстве, которое можно было бы устроить на эти деньги. Челкаш также задумался о своём прошлом — отце, зажиточном крестьянине, и детстве. Он вспоминал мать, жену и как вся деревня встречала его из армии, гордившуюся им. Воспоминания вызвали у него чувство одиночества и осознание отторжённости от прежней жизни.
Шлюпка причалила к низкому судну, где смуглые нерусские забрали товар, после чего подельники легли спать.
Утром Гаврила не сразу узнал Челкаша в обновлённой одежде. Парень оправился от страха и был готов вновь работать с ним, надеясь, что душа не пострадает, а богатство придёт. По пути к берегу Челкаш отдал Гавриле его долю, и тот заметил, сколько денег у вора осталось.
Высадившись, Гаврила, взволнованный, упал на колени перед Челкашом и попросил отдать ему все деньги, опасаясь, что вор их прогуляет. Он пообещал устроить хозяйство и стать уважаемым человеком в деревне. Челкаш, изумлённый и раздражённый, бросил ему купюры. Он понимал, что сам, будучи вором и гулякой, никогда не станет таким жадным и низким.
Гаврила признался, что готов был ударить Челкаша веслом, ограбить и утопить его, считая его пропащим человеком. Услышав это, Челкаш схватил молодого человека за горло, отнял деньги и повернулся, чтобы уйти. Тогда Гаврила бросил в вора большой камень в голову.
Челкаш упал. Испуганный Гаврила убежал, забыв о деньгах, но вскоре вернулся и стал пытаться привести его в сознание, прося прощения и целуя руки. Челкаш, проявляя презрение, плюнул ему в глаза, бросил деньги и удалился, пошатываясь вдоль берега. Гаврила вздохнул, собрал деньги и твёрдым шагом пошёл в противоположную сторону.
Вскоре дождь и прилив смыли следы и пятна крови на песке, и ничто уже не напоминало о небольшой драме, разыгравшейся между двумя людьми.